PyQt5 - QDock 小部件

  • 简述

    可停靠窗口是一个子窗口,它可以保持浮动状态,也可以附加到主窗口的指定位置。QMainWindow 类的主窗口对象有一个为可停靠窗口保留的区域。该区域位于中央小部件周围。
    停靠窗口可以在主窗口内移动,也可以取消停靠以由用户移动到新区域。这些属性由以下控制QDockWidget类方法 -
    序号 方法和描述
    1
    setWidget()
    在停靠窗口的区域中设置任何 QWidget
    2
    setFloating()
    如果设置为 true,停靠窗口可以浮动
    3
    setAllowedAreas()
    设置窗口可以停靠的区域
    LeftDockWidgetArea
    RightDockWidgetArea
    TopDockWidgetArea
    BottomDockWidgetArea
    NoDockWidgetArea
    4
    setFeatures()
    设置停靠窗口的功能
    DockWidgetClosable
    DockWidgetMovable
    DockWidgetFloatable
    DockWidgetVerticalTitleBar
    NoDockWidget功能
  • 例子

    在下面的例子中,顶层窗口是一个 QMainWindow 对象。QTextEdit 对象是它的中心部件。
    
    self.setCentralWidget(QTextEdit())
    
    首先创建一个可停靠窗口。
    
    self.items = QDockWidget("Dockable", self)
    
    QListWidget 对象被添加为停靠窗口。
    
    self.listWidget = QListWidget()
    self.listWidget.addItem("item1")
    self.listWidget.addItem("item2")
    self.listWidget.addItem("item3")
    self.items.setWidget(self.listWidget)
    
    可停靠对象放置在中央小部件的右侧。
    
    self.addDockWidget(Qt.RightDockWidgetArea, self.items)
    
    完整的代码如下 -
    
    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)
              
          layout = QHBoxLayout()
          bar = self.menuBar()
          file = bar.addMenu("File")
          file.addAction("New")
          file.addAction("save")
          file.addAction("quit")
              
          self.items = QDockWidget("Dockable", self)
          self.listWidget = QListWidget()
          self.listWidget.addItem("item1")
          self.listWidget.addItem("item2")
          self.listWidget.addItem("item3")
              
          self.items.setWidget(self.listWidget)
          self.items.setFloating(False)
          self.setCentralWidget(QTextEdit())
          self.addDockWidget(Qt.RightDockWidgetArea, self.items)
          self.setLayout(layout)
          self.setWindowTitle("Dock demo")
              
    def main():
       app = QApplication(sys.argv)
       ex = dockdemo()
       ex.show()
       sys.exit(app.exec_())
         
    if __name__ == '__main__':
       main()
    
    上面的代码产生以下输出。单击 Dock 图标以取消停靠 ListWidget 窗口。双击再次停靠 -
    QDockWidget 输出