【问题标题】:Block and hide QDialog: Alternative to exec_()?阻止和隐藏 QDialog:exec_() 的替代方案?
【发布时间】:2011-11-30 00:32:06
【问题描述】:

在我基于 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 预期的)

【问题讨论】:

    标签: python qt pyqt exec pyqt4


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2013-08-20
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      相关资源
      最近更新 更多