有時我的QProgressDialog顯示,有時它根本不顯示(就好像processEvents沒有被調用)。是否有processEvents()命令的任何工件可能導致QProgressDialog在某些情況下不顯示?如何確保QProgressDialog顯示在PyQt
我的問題是一般的,因爲我還沒有能夠隔離我的代碼中的問題。但是,我注意到,當我使用配置解析器訪問文本文件時,我的QProgressDialog未顯示出現問題。解決方法是在文件關閉後執行time.sleep()(可能確保進程已完成,然後processEvents將開始顯示QProgressDialog)。
如果有幫助,這是我用於運行QProgressDialog作爲發電機代碼:
def progress_dialog(self, data, label, window_title, stop_label, capture_bar=False):
bar = QProgressDialog(label, stop_label, 0, len(data))
if capture_bar: self.prog_bar = bar
bar.setWindowTitle(window_title)
for k, d in enumerate(data):
QCoreApplication.instance().processEvents()
if bar.wasCanceled():
raise GeneratorExit
# set the next value beyond the start of 0
bar.setValue(k+1)
# again process events to draw the new label and value
QCoreApplication.instance().processEvents()
yield(d)
raise StopIteration
再次,抱歉,我沒有孤立的問題的一個完整的代碼片段(和完整的代碼量太大的海洋)。我想我正在尋找的是檢查processEvents()命令是否正在完成其工作的原因(因爲顯然我稱之爲它,但掛起在其他進程而不是顯示對話框)。
編輯:
根據這一支持請求做一個「bar.show()」命令將迫使進度條來顯示。
http://redmine.smar.fi/issues/265
我要等幾個星期,並確保這是張貼作爲一個答案之前保證修補程序。
不幸的是這並沒有解決我的具體問題。仍然給予+1感謝您的幫助。 – ecoe