【问题标题】:PyQt - Do not want modeless dialog always on topPyQt - 不希望无模式对话框始终位于顶部
【发布时间】:2013-11-23 21:24:58
【问题描述】:

我有一个创建无模式对话框的主窗口。这很好用,但对话框总是在主窗口的前面。即使我回到主窗口并使用它来获得焦点,对话框也始终保持在顶部。我无法在对话框顶部滑动主窗口。

我将主窗口的自身作为父窗口传递给对话框。

#In my main window
self.beacon_dlg = dialog_beacon.BeaconDialog(self)

#In the dialog class
class BeaconDialog(QDialog, ui_dialog_beacon.Ui_Dlg_beacon_soh):
    def __init__(self, parent):
        super(BeaconDialog, self).__init__(parent)
        self.setupUi(self)

知道如何让主窗口位于对话框前面,并且在主窗口关闭时仍然关闭对话框(父控件)?

(我在 Windows 上使用 PyQt 4.10 和 Python 2.7)

谢谢。

【问题讨论】:

    标签: python dialog pyqt modeless


    【解决方案1】:

    来自QDialog Class Reference:“对话框始终是顶级小部件,但如果它有父级,则其默认位置居中于父级顶级小部件的顶部(如果它本身不是顶级) . 它还将共享父级的任务栏条目。”

    您可以尝试改用QWidget

    【讨论】:

    • 感谢您的建议。我不清楚在这种情况下使用 QWidget 的优点或缺点。我会发布我的想法。
    • 优点是基于 QWidget 的窗口并不总是在顶部。 QDialog 总是在最上面,你不希望这样。
    【解决方案2】:

    我最终使用了以下方法,它似乎有效,但不确定它是否是最好的方法。而不是使用:

    def __init__(self, parent):
        super(BeaconDialog, self).__init__(parent)
    

    我用过:

    def __init__(self, parent):
        super(BeaconDialog, self).__init__()
    

    因此不会使对话框成为主窗口的子窗口。 (出于其他原因,我仍然将主窗口作为参数传递给类)

    然而,为了让对话框正确关闭,我不得不重载主窗口的 closeEvent() 并自己关闭对话框:

    def closeEvnet(self):
        if (self.beacon_dlg) : self.beacon_dlg.reject()
    

    【讨论】:

      猜你喜欢
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多