【问题标题】:wxpython using gauge pulse with threaded long running processeswxpython 使用计量脉冲和线程长时间运行的进程
【发布时间】:2013-09-16 11:23:18
【问题描述】:

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

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

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

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

任何帮助将不胜感激!

progress_bar.Pulse()

【问题讨论】:

    标签: multithreading wxpython gauge pulse


    【解决方案1】:

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

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

    前者最适合显示进度,而后者则适用于您只想向用户展示您的应用正在做某事的情况。另请参阅

    【讨论】:

    • 感谢迈克的回复。该应用程序只是我的一个宠物项目。 !st 程序我曾经尝试过编写。它是用于 linux 的文件加密程序,因此长时间运行的过程与加密文件有关。文件越大,所需的时间就越长。对于小文件,它几乎是即时的,但是在使用一些较大的文件测试应用程序之后,很明显我需要某种繁忙的对象来让用户知道正在发生一些事情。谢谢你的链接。我已经看过那些了。
    • 线程似乎是一个相当复杂的过程,只是为了产生一个进度条。将看看 wx.Timer,如果我只是脉冲进度条,它可能会完成这项工作。
    • 是的...使用线程的主要原因是为了防止长时间运行的进程阻塞 GUI 线程的主循环,这会使您的应用程序看起来冻结。我可能应该链接到我的计时器教程,所以你去:blog.pythonlibrary.org/2009/08/25/wxpython-using-wx-timers
    猜你喜欢
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多