阻止和隐藏QDialog:exec_()的替代方案?

时间:2011-11-30 00:32:07

标签: python qt pyqt exec pyqt4

在我的基于Qt的应用程序(使用PyQt 4.8.6构建)中,我有一个类是QtGui.QDialog的子类:

class ModelDialog(QtGui.QDialog):
    ...

当我运行应用程序的用户界面时,我可以像这样显示QDialog:

def main():
    app = QtGui.QApplication(sys.argv)
    dialog = ModelDialog()
    dialog.exec_()

根据Qt docsPyQt docsexec_()是此QDialog的阻止函数,默认为模态窗口(根据定义,它阻止用户与任何其他窗口进行交互)应用程序中的窗口)。这正是在正常情况下发生的事情。

但是,最近,我一直致力于使用所有输入值的默认值调用整个QApplication,而不是要求用户输入任何内容。除了一个方面外,应用程序的行为与预期相同:调用dialog.exec_()会导致显示模式对话框。

我能找到的唯一解决方法是捕获showEvent函数并立即隐藏窗口,但这仍然允许QDialog对象暂时显示:

class ModelDialog(QtGui.QDialog):
    ...
    def showEvent(self, data=None):
        self.hide()

有没有办法阻止模态窗口完全显示,同时继续阻止主事件循环?我喜欢那里有类似的东西:

def main():
    app = QtGui.QApplication(sys.argv)
    dialog = ModelDialog()
    dialog.setHideNoMatterWhat(True)
    dialog.exec_()

(为此,我尝试使用QWidget.setVisible(False),但dialog.exec_()设置对话框无论如何都是可见的,根据Qt docs预期

1 个答案:

答案 0 :(得分:2)

使用app.exec_()代替dialog.exec_()