PyQt4 如何让 QWidget 始终在最前面?

PyQt4 How keep a QWidget always on top?

我在 Windows7

上使用 PyQt4 和 python 2.7

我有一个 QWidget,我想在单击主窗口时保持在 QMainWindow 上方。这个想法是,主要将包含一系列 'edit' 按钮,这些按钮将打开编辑小部件,而编辑小部件会刷新主要包含的信息。只要小部件位于主要 window.

的前面,我就不会特别在意两者是否 "always on top"

有几个问题涉及此主题,但我没有看到适合我的特定用例的答案。一个处理小部件,但仅针对应用程序主 window 提供答案(小部件保持在其他环境 windows 之上,但在单击主应用程序时落后于应用程序主 window),另一个一般解决 Qt 但不是 pythonic 示例:

PyQt: Always on top

How keep a QWidget always on top?

这是我目前的代码:

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self, None, QtCore.Qt.WindowStaysOnTopHint)
        self.setWindowTitle("MainWindow")
        self.resize(400, 300)

class Ui_Widget(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self, None, QtCore.Qt.WindowStaysOnTopHint)
        self.setWindowTitle("Widget")
        self.resize(400, 300)

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = Ui_MainWindow()
    MainWindow.show()
    Widget = Ui_Widget()
    Widget.show()
    sys.exit(app.exec_())

如果您希望 Ui_Widget 始终位于 Ui_MainWindow 之上,Ui_Widget 必须是 Ui_MainWindow 的子项并且标志 Qt::Dialog 必须是激活如下图:

from PyQt4 import QtCore, QtGui

class Ui_MainWindow(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.setWindowTitle("MainWindow")
        self.resize(400, 300)

class Ui_Widget(QtGui.QWidget):
    def __init__(self,  parent=None):
        QtGui.QWidget.__init__(self, parent)
        self.setWindowFlags(self.windowFlags() | QtCore.Qt.Dialog)
        self.setWindowTitle("Widget")
        self.resize(400, 300)
        self.move(200, 150)

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = Ui_MainWindow()
    MainWindow.show()
    Widget = Ui_Widget(MainWindow)
    Widget.show()
    sys.exit(app.exec_())