0

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

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

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

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

任何帮助将不胜感激!

progress_bar.Pulse()
4

1 回答 1

2

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

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

前者最适合显示进度,而后者适用于您只想向用户展示您的应用正在做某事的情况。也可以看看

于 2013-09-16T13:19:10.020 回答