PyQt - 不要总是在无模式对话框上面

时间:2013-11-11 22:23:36

标签: python dialog pyqt modeless

我有一个主窗口,可以创建无模式对话框。这很好用,但对话框总是在主窗口的前面。即使我回到主窗口并使用它来聚焦,对话框仍然保持在最顶层。我无法在对话框顶部滑动主窗口。

我将主窗口的self作为对话框的父级传递。

#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)

感谢。

1 个答案:

答案 0 :(得分:1)

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

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()