PyQt5让QDialog在允许用户输入之前等待进程完成
Posted
技术标签:
【中文标题】PyQt5让QDialog在允许用户输入之前等待进程完成【英文标题】:PyQt5 Make QDialog wait for a process to finish before allowing user input 【发布时间】:2020-03-16 08:50:19 【问题描述】:在搜索了一段时间并找到了很多 PyQt4 的结果后,我无法转换自己,我需要一些帮助来解决我的应用程序需要的状态窗口。
该窗口在进程启动时打开,并且不应允许用户在主 GUI 中进行任何进一步的输入,并且用户在进程完成并激活关闭按钮之前不能关闭它。
到目前为止,我用 QDialog 尝试了这个并省略了框架(仍然需要捕获“ESC”键),但我相信有更好的解决方案。我的代码:
def resultWindow(self):
self.resultBox = QDialog(self)
self.resultBox.setWindowTitle("Please Wait")
self.OkButton = QtWidgets.QPushButton(self.resultBox)
self.OkButton.setText("Ok")
self.OkButton.setEnabled(False)
self.OkButton.clicked.connect(self.OkButton_clkd)
self.resultBox.setWindowFlags(QtCore.Qt.CustomizeWindowHint | QtCore.Qt.FramelessWindowHint | QtCore.Qt.Tool)
self.resultBox.exec_()
def OkButton_clkd(self):
self.resultBox.close()
那么,更聪明的方法是什么?
【问题讨论】:
【参考方案1】:除了完全移除框架,这也会阻止用户移动或调整对话框大小,您可以通过执行类似的操作从标题栏中移除关闭按钮
self.resultBox.setWindowFlags(QtCore.Qt.Window | QtCore.Qt.WindowStaysOnTopHint|
QtCore.Qt.CustomizeWindowHint | QtCore.Qt.WindowTitleHint)
要捕获对话框的转义键,您可以安装一个事件过滤器,例如
def resultWindow(self):
self.resultBox = QtWidgets.QDialog(self)
self.resultBox.installEventFilter(self)
....
def eventFilter(self, object, event):
if (object == self.resultBox and
event.type() == QtCore.QEvent.KeyPress and
event.key() == Qt.Key_Escape):
return True
return super().eventFilter(object, event)
或者你可以继承 QDialog
并覆盖 keyPressEvent()
【讨论】:
感谢 eventFilter sn-p。问题:是否可以一次阻止所有“退出”键/组合?还有 ALT+F4 并且可能是特定于操作系统的...?以上是关于PyQt5让QDialog在允许用户输入之前等待进程完成的主要内容,如果未能解决你的问题,请参考以下文章