【发布时间】:2013-02-12 06:13:06
【问题描述】:
在我的 PyQt4 应用程序中,有一个功能允许用户保存 avi 文件。 为此,在主窗口中实现了 saveMovie 方法:
def saveMovie(self):
""" Let the user make a movie out of the current experiment. """
filename = QtGui.QFileDialog.getSaveFileName(self, "Export Movie", "",
'AVI Movie File (*.avi)')
if filename != "":
dialog = QtGui.QProgressDialog('',
QtCore.QString(),
0, 100,
self,
QtCore.Qt.Dialog |
QtCore.Qt.WindowTitleHint)
dialog.setWindowModality(QtCore.Qt.WindowModal)
dialog.setWindowTitle('Exporting Movie')
dialog.setLabelText('Resampling...')
dialog.show()
make_movie(self.appStatus, filename, dialog)
dialog.close()
我的想法是使用 QProgressDialog 来显示视频编码工作是如何进行的。
然而,在选择文件名后,QFileDialog 不会消失,整个应用程序将保持无响应,直到 make_movie 函数完成。
我应该怎么做才能避免这种情况?
【问题讨论】:
-
尝试添加对
processEvents()的呼叫。见this question。 -
我在 if 语句之前添加了对 QApplication.processEvents() 的调用,不幸的是它不起作用。
-
processEvents()需要去阻塞部分。make_movie在这种情况下,我猜。取决于make_movie的实现,这可能会也可能不会解决问题。或者您可以将该部分移至不同的线程。 -
是的,最后我将
make_movie移到了另一个线程,以避免阻塞用户界面。很快就会发布代码。
标签: python pyqt pyqt4 qfiledialog