PyQt4如何让QWidget保持最佳状态?

时间:2018-06-16 22:27:58

标签: python pyqt pyqt4 qwidget

我在Windows7上使用PyQt4和python 2.7

我有一个QWidget,我希望在点击主要时保持在QMainWindow之上。这个想法是主要包含一系列编辑'将打开编辑窗口小部件的按钮,而编辑窗口小部件将刷新主要包含的信息。如果其中任何一个是"总是在顶部"我并不特别在意。只要小部件停留在主窗口前面。

有几个问题可以解决这个问题,但我没有看到适用于我的具体用例的答案。一个处理窗口小部件,但仅为应用程序主窗口提供答案(窗口小部件保持在其他环境窗口之上,但在单击主要窗口时落在应用程序主窗口之后),而另一个处理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_())

1 个答案:

答案 0 :(得分:1)

如果您希望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_())