我正在开发的程序使用线程来处理长时间运行的进程。我希望能够使用Gauge Pulse向用户显示在长时间运行的线程正在进行时,实际上正在发生一些事情。否则,在处理大型文件时,视觉上不会发生任何事情。用户可能认为该程序什么都不做。
我已在程序的状态栏中放置了一个指示器。我的问题是这个。我在尝试调用脉冲时遇到问题,无论我在哪里放置代码,它都会运行到快速然后停止,或以正确的速度运行几秒钟然后停止。
我尝试将下面的一行代码放入线程本身。我也尝试在长时间运行的进程线程中创建另一个线程来调用下面的代码。我仍然遇到同样的问题。
我认为我不能使用wx.CallAfter,因为这会打败这一点。在进程运行时需要调用脉冲,而不是事后。还尝试了time.sleep(2),这也不好,因为它减慢了进程,这是我想要避免的。即使使用time.sleep(2),我仍然遇到同样的问题。
任何帮助都会受到大力赞赏!
progress_bar.Pulse()
答案 0 :(得分:2)
在长时间运行的过程中,您需要找到从线程向主GUI发送更新请求的过程。例如,如果您使用线程下载非常大的文件,则应以块的形式下载它,并且在每个块完成后,您将向GUI发送更新。
如果你正在运行一些不真正允许块的东西,比如使用fop创建一个大的PDF,那么我想你可以使用一个wx.Timer()来告诉指针每隔一段时间就会发出脉冲。然后当线程完成时,它将发送一条消息以阻止计时器对象更新仪表。
如果您只想向用户显示您的应用正在执行某项操作,那么前者最适合显示进度而后者有效。另见