经过一段时间的搜索并找到许多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()
那么,什么是更聪明的方法呢?
不是完全删除框架,这也阻止了用户移动或调整对话框大小,您可以通过执行类似的操作从标题栏中删除关闭按钮。]
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()