【发布时间】:2016-04-02 11:13:24
【问题描述】:
我正在编写一个 PyQt GUI 应用程序,我想为我的一个函数显示一个繁忙的进度条,这需要时间来完成。代码如下:
self.progress = QtGui.QProgressDialog("Canceling...", None, 0, 0, self)
self.progress.setWindowTitle("Canceling refresh")
self.progress.show()
timer = QtCore.QTimer()
timer.singleShot(0, self.loadNotifications)
while timer.isActive():
app.processEvents()
目前,我尝试使用 QTimer,但它不起作用。 CPU绑定函数是loadNotifications。
我想在一个线程中启动它,并在它运行时更新 QProgressBar。
我当然可以围绕函数 loadNotifications 创建一个 QThread 类,但这对于我想做的事情来说有点过头了:在函数运行时简单地显示一个平滑的进度条。
你有什么想法吗?
【问题讨论】:
-
您可以更新正在运行的函数中的进度条,这将冻结您的应用程序,或者(正如您已经提到的)您生成一个新线程来执行该函数,这是一种常见的方式处理这类事情。您可以使用
connect来更新进度条。 -
难道没有一种灵活的方法可以只使用 long 函数作为参数来生成线程吗?
-
您可以为此编写自己的小班。看看joplaete.wordpress.com/2010/07/21/threading-with-pyqt4。
-
是的,非常优雅和灵活。我会用那个。但是为什么我们不能默认这样做呢?
标签: python multithreading pyqt progress-bar