PyQt5使QDialog在允许用户输入之前等待过程完成

问题描述 投票:0回答:1

经过一段时间的搜索并找到许多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()

那么,什么是更聪明的方法呢?

python-3.x pyqt5 qdialog
1个回答
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()

© www.soinside.com 2019 - 2024. All rights reserved.