在我的基于Qt的应用程序(使用PyQt 4.8.6构建)中,我有一个类是QtGui.QDialog的子类:
class ModelDialog(QtGui.QDialog):
...
当我运行应用程序的用户界面时,我可以像这样显示QDialog:
def main():
app = QtGui.QApplication(sys.argv)
dialog = ModelDialog()
dialog.exec_()
根据Qt docs和PyQt docs,exec_()
是此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预期
答案 0 :(得分:2)
使用app.exec_()
代替dialog.exec_()
。