2

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

我将主窗口的 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)

谢谢。

4

2 回答 2

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()
于 2013-11-13T04:29:24.400 回答
0

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

您可以尝试改用QWidget

于 2013-11-12T07:26:31.347 回答