【发布时间】:2017-12-19 02:58:09
【问题描述】:
我有一个简单的程序,我希望在其中有一个远程更新的模态、非阻塞进度窗口(使用 QProgressDialog)。 SIZE 只是控制 QProgressDialog 的最大值。但是,如果我将其设置为 4 或更低的值,则窗口在整个操作期间看起来像这样:
换句话说,窗口是完全白色的,既不显示文本也不显示进度条。如果我将 SIZE 的值设置为 5 或更大,则显示工作正常,但仅在 2-3 次第一次迭代之后:
以后
import sys, time
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
SIZE = 5
def doGenerate(setValue):
for x2 in range(SIZE):
time.sleep(1)
setValue(x2 + 1)
print('Done')
class MainMenu(QMainWindow):
def __init__(self):
super().__init__()
self.genAudioButton = QPushButton('Generate', self)
self.genAudioButton.clicked.connect(self.generate)
self.setCentralWidget(self.genAudioButton)
self.show()
def generate(self):
try:
progress = QProgressDialog('Work in progress', '', 0, SIZE, self)
progress.setWindowTitle("Generating files...")
progress.setWindowModality(Qt.WindowModal)
progress.show()
progress.setValue(0)
doGenerate(progress.setValue)
except Exception as e:
errBox = QMessageBox()
errBox.setWindowTitle('Error')
errBox.setText('Error: ' + str(e))
errBox.addButton(QMessageBox.Ok)
errBox.exec()
return
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MainMenu()
ret = app.exec_()
sys.exit(ret)
这是什么原因造成的,我该如何解决?
另外,有没有办法完全删除取消按钮,而不是让一个空按钮仍然取消操作? PyQt4 文档(我正在使用 PyQt5)表明空字符串应该达到这个结果,而 Qt5 的 C++ 文档表明相同,但这显然在这里不起作用。我还没有找到 PyQt5 的独立文档。
【问题讨论】:
标签: python pyqt modal-dialog pyqt5 nonblocking