Python 切换程序时,如何使未连接的QDockWidget保持可见?

Python 切换程序时,如何使未连接的QDockWidget保持可见?,python,qt,pyqt,pyqt5,Python,Qt,Pyqt,Pyqt5,我在一个Qmain窗口中有几个QdockWidget。当我解开一个窗口并切换到另一个程序时,解开的小部件就会消失。切换程序时,如何使未连接的QDockWidget可见或保持可见 所以,我发现以下几行 super(MainProgram, self).__init__(parent,Qt.WindowStaysOnTopHint) 确保整个程序始终处于最佳状态。但是,未锁定的小部件仍然会消失。即使我在qdockwidget代码中放入以下行: self.Risk_Monitor.setWindow

我在一个Qmain窗口中有几个QdockWidget。当我解开一个窗口并切换到另一个程序时,解开的小部件就会消失。切换程序时,如何使未连接的QDockWidget可见或保持可见

所以,我发现以下几行

super(MainProgram, self).__init__(parent,Qt.WindowStaysOnTopHint)
确保整个程序始终处于最佳状态。但是,未锁定的小部件仍然会消失。即使我在qdockwidget代码中放入以下行:

self.Risk_Monitor.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)  
当然也可以让浮动小部件保持在顶部,对吗

以下几点似乎不起作用:

import sys
from PyQt5.QtCore    import *
from PyQt5.QtGui     import *
from PyQt5.QtWidgets import *

class Dockdemo(QMainWindow):
    def __init__(self, parent=None):
        super(Dockdemo, self).__init__(parent,Qt.WindowStaysOnTopHint)

        self.setWindowTitle("Dock demo")
        self.setCentralWidget(QTextEdit())


        items      = QDockWidget("Stay on Top!", self, flags=Qt.Window) 
        #items      = QDockWidget("Dockable", self, flags=Qt.WindowStaysOnTopHint)  # flags=Qt.Window
#        items.setGeometry(650, 130, 300, 200)
        items.show()                                                 # +++

        listWidget = QListWidget()
        listWidget.addItem("item1")
        listWidget.addItem("item2")
        listWidget.addItem("item3")
        items.setWidget(listWidget)
        items.setFloating(False)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Dockdemo()
    ex.show()
    sys.exit(app.exec_())
*

已解决:

import sys
from PyQt5.QtCore    import *
from PyQt5.QtGui     import *
from PyQt5.QtWidgets import *

class Dockdemo(QMainWindow):
    def __init__(self, parent=None):
        super(Dockdemo, self).__init__(parent,Qt.WindowStaysOnTopHint)

        self.setWindowTitle("Dock demo")
        self.setCentralWidget(QTextEdit())

        items      = QDockWidget("Dockable", self)  # flags=Qt.Window
        #items.setWindowFlags(Qt.WindowStaysOnTopHint) 
#        items.setGeometry(650, 130, 300, 200)
        items.setWindowFlags(
        Qt.Window |
        Qt.CustomizeWindowHint |
        Qt.WindowTitleHint |
        Qt.WindowCloseButtonHint |
        Qt.WindowStaysOnTopHint
        )
        items.show()                                              
        # items.raise_()
        listWidget = QListWidget()
        listWidget.addItem("item1")
        listWidget.addItem("item2")
        listWidget.addItem("item3")
        items.setWidget(listWidget)
        items.setFloating(False)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Dockdemo()
    ex.show()
    sys.exit(app.exec_())

请注意,这只适用于Windows,不能移植到其他操作系统。@Jens,这不是真的;我在OSX上,它工作正常。