Multithreading wxpython使用带线程长时间运行过程的仪表脉冲

Multithreading wxpython使用带线程长时间运行过程的仪表脉冲,multithreading,wxpython,gauge,pulse,Multithreading,Wxpython,Gauge,Pulse,我正在开发的程序使用线程来处理长时间运行的进程。我希望能够使用Gauge Pulse向用户显示,当长时间运行的线程正在进行时,实际发生了一些事情。否则,在处理大文件时,在相当长的一段时间内,视觉上什么也不会发生&用户可能会认为程序什么也没做 我在程序的状态栏中放置了一个量规。我的问题是这个。我在尝试调用gauge pulse时遇到问题,无论我将代码放在何处,它要么运行快然后停止,要么以正确的速度运行几秒钟然后停止 我尝试将下面的一行代码放入线程本身。我还尝试从长时间运行的进程线程中创建另一个线程

我正在开发的程序使用线程来处理长时间运行的进程。我希望能够使用Gauge Pulse向用户显示,当长时间运行的线程正在进行时,实际发生了一些事情。否则,在处理大文件时,在相当长的一段时间内,视觉上什么也不会发生&用户可能会认为程序什么也没做

我在程序的状态栏中放置了一个量规。我的问题是这个。我在尝试调用gauge pulse时遇到问题,无论我将代码放在何处,它要么运行快然后停止,要么以正确的速度运行几秒钟然后停止

我尝试将下面的一行代码放入线程本身。我还尝试从长时间运行的进程线程中创建另一个线程来调用下面的代码。我仍然遇到同样的问题

我不认为我可以使用wx.CallAfter,因为这会破坏这一点。需要在进程运行时调用Pulse,而不是事后调用。我也试过使用time.sleep(2),这也不好,因为它会减慢进程,这是我想要避免的。即使是在利用时间睡觉的时候,我仍然有同样的问题

任何帮助都将不胜感激

progress_bar.Pulse()

在长时间运行的过程中,您需要找到某种方法从线程向主GUI发送更新请求。例如,如果您正在使用线程下载一个非常大的文件,您将分块下载它,并且在每个块完成后,您将向GUI发送更新

如果您正在运行一些不允许使用块的操作,例如使用fop创建大型PDF,那么我想您可以使用一个wx.Timer()命令仪表每隔一段时间脉冲一次。然后,当线程完成时,它将发送一条消息,阻止计时器对象更新仪表

如果你只是想向用户展示你的应用程序正在做什么,前者最适合显示进度,而后者则有效。另见


谢谢你的回复,迈克。这个应用程序只是我的一个apet项目!我曾经尝试编写的st程序。这是一个针对linux的文件加密程序,因此长时间运行的过程与加密文件有关。文件越大,所需时间越长。对于小文件,它几乎是即时的,但在使用一些较大的文件测试应用程序后,很明显,我需要某种忙碌的对象,让用户知道正在发生什么。唐斯克的链接。我已经看过了。线程似乎是一个相当复杂的过程,只是为了产生一个进度条。看一下wx.Timer,如果我只是按一下进度条,它可能就完成了。是的……使用线程的主要原因是为了防止长时间运行的进程阻塞GUI线程的主循环,这会使你的应用程序看起来冻结。我可能应该链接到我的计时器教程,所以你可以这样做: