PyQT中的弹出,非模态,内联对话框

问题描述 投票:3回答:2

很难描述我想在这里做什么,所以这就是我想要的:

- 单击“弹出”对话框的按钮。

- 但是,这个对话框应该是非模态的。

- 我也希望它与父应用程序“锁定”,所以如果我移动它,它也会随之而来。

看起来我或多或少想要描述一个内联弹出窗口,但我不确定这是不是所谓的,甚至我应该如何处理这个问题。那么,PyQt大师,你会怎么做这样的东西?提前致谢。

python dialog pyqt pyqt4
2个回答
3
投票

要获得无模式对话框,请使用show()而不是exec_()打开它。

要确保对话框“与父应用程序锁定”,请在对话框的构造函数中设置父窗口。

from PyQt4 import QtGui

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        button = QtGui.QPushButton('Open Dialog', self)
        button.clicked.connect(self.handleOpenDialog)
        self.resize(300, 200)
        self._dialog = None

    def handleOpenDialog(self):
        if self._dialog is None:
            self._dialog = QtGui.QDialog(self)
            self._dialog.resize(200, 100)
        self._dialog.show()

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

0
投票

对于Qt5:

我忽略了为什么dialog.setWindowModality(QtCore.Qt.NonModal)不起作用,但是

dialog.run()
dialog.exec_()

会做。 run将使对话框非模态,exec_将阻止它直到用户输入。

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