【问题标题】:Popup, non-modal, in-line Dialog in PyQTPyQT 中的弹出式、非模态、内联对话框
【发布时间】:2011-12-19 15:18:55
【问题描述】:

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

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

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

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

似乎我或多或少地试图描述一个内联弹出窗口,但我不确定这是否就是所谓的,甚至我应该如何解决这个问题。那么,PyQt 大师,您将如何制作这样的东西?提前致谢。

【问题讨论】:

  • 必须是对话框吗?您可以在主窗口上有一个小部件,该小部件将通过按钮显示/隐藏。有点像在某些 GUI 中“显示更多”的东西。
  • 我想这可能需要一些幻想,但我怀疑最终可能会做我想做的事。
  • @ekhumoro 的回答解决了除“锁定”方面之外的所有问题。我从来没有见过这样的事情实现,但我想你可以,如果你愿意,挂钩到孩子的移动事件并用它移动父母......虽然那会很奇怪。是否有您尝试模仿的常见应用?
  • 原来只是一个糟糕的应用程序方法。我最终通过使用“隐藏”的 tabWidget 获得了我想要的东西,我可以在索引之间切换。

标签: python dialog pyqt pyqt4


【解决方案1】:

要获得无模式对话框,请使用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_())

【讨论】:

    【解决方案2】:

    对于 Qt5:

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

    dialog.run()
    dialog.exec_()
    

    会的。 run 将使对话框成为非模式对话框,exec_ 将阻止它直到用户输入。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多