27.PyQt5【高级组件】浮动窗口-QDockWidget

一、前言

Qt提供QDockWidget停靠窗口控件来实现浮动窗口的功能,QDockWidget停靠窗口控件一般使用在QMainWindow中,它是放置在QMainWindow中的中央窗口小部件周围的停靠窗口小部件区域中的次要窗口。

二、学习目标

1.QDockWidget常用方法

2.QDockWidget常用信号

3.QDockWidget组件的应用

三、知识点

1.【QDockWidget常用方法】

  • QMainWindow提供了一系列函数来管理和操控QDockWidget

    方法 描述
    addDockWidget(area,dockwidget) 添加一个给定的停靠窗口到指定区域
    splitDockWidget(after,dockwidget,orientation) 把两个dock进行左右或上下并排布置,做成一个类似QSplitter的功能
    tabifyDockWidget(first,second) 移动第二个停靠窗口到第一个停靠窗口,可以在主窗口中生成一个标签样式的停靠窗口
    tabifiedDockWidgets(dockwidget) 返回和指定停靠窗口形成标签样式的停靠窗口列表
    removeDockWidget(dockwidget) 从主窗口布局中移除停靠窗口,并隐藏它,注意,停靠窗口并不会被删除
    restoreDockWidget(dockwidget) 恢复停靠窗口的状态
    dockWidgetArea(dockwidget) 返回指定停靠窗口的停靠区域,返回值为Qt. DockWidgetArea的相关取值
    resizeDocks(docks,sizes,orientation) 改变指定停靠窗口列表的尺寸
    setDockNestingEnabled(enabled) 设置停靠窗口是否可以嵌套
    isDockNestingEnabled() 返回停靠窗口是否有可嵌套的特性
    setDockOptions(options) 设置停靠窗口的停靠属性,取值见QMainWindow. DockOption:
    AnimatedDocks: 动画方式停靠;
    AllowNestedDocks: 允许嵌套;
    AllowTabbedDocks: 允许标签页方式停靠;
    ForceTabbedDocks: 强制标签页方式停靠;
    VerticalTabs: 垂直标签页方式;
    GroupedDragging: 允许成组拖动标签页停靠窗口。
    dockOptions() 获得停靠窗口的停靠属性
  • QDockWidget常用方法

    方法 描述
    setWidget(widget) 在Dock窗口区域设置QWidget
    setFloating(floating) 设置Dock窗口是否可以浮动,如果设置为True,则表示可以浮动
    setTitleBarWidget(widget) 设置停靠窗口标题栏部件
    setAllowedAreas(areas) 设置窗口可以停靠的Qt. DockWidgetArea区域:
    LeftDockWidgetArea: 窗口可在左侧停靠;
    RightDockWidgetArea: 窗口可在右侧停靠;
    TopDockWidgetArea: 窗口可在顶端停靠;
    BottomDockWidgetArea: 窗口可在底端停靠;
    AllDockWidgetArea: 窗口可在任意方向停靠;
    NoDockWidgetArea: 只可停靠在插入处。
    setFeatures(features) 设置停靠窗口的功能属性:
    DockWidgetClosable: 允许关闭,在一些系统上会显示一个关闭按钮;
    DockWidgetMovable: 允许在Dock之间移动;
    DockWidgetFloatable: 允许作为一个独立窗口浮动;
    DockWidgetVerticalTitleBar: 在Dock左侧显示一个垂直标题栏;
    AllDockWidgetFeatures:具有前三种属性的所有功能;
    NoDockWidgetFeatures: 无具体特性设置,无法关闭、移动或者浮动。
    features() 返回停靠窗口的特性设置
    isFloating() 返回停靠窗口的可浮动属性
    allowedAreas() 返回停靠窗口允许停靠的区域
    titleBarWidget() 返回停靠窗口标题栏部件

2.【QDockWidget常用信号】

信号 描述
allowedAreasChanged(allowedAreas) 停靠窗口的允许停靠区域发生了改变时,发射该信号
dockLocationChanged(area) 停靠窗口的位置发生了改变时,发射该信号
featuresChanged(features) 停靠窗口的特性发生了改变时,发射该信号
topLevelChanged(topLevel) 停靠窗口的浮动属性发生了改变时,发射该信号
visibilityChanged(visible) 停靠窗口的可视属性(显示/隐藏)发生改变时,发射该信号

3.【QDockWidget组件的应用】

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QTextEdit, QPushButton


class QmyMainWindow(QMainWindow):

    def __init__(self, parent=None):
        super().__init__(parent)  # 调用父类的构造函数,创建QWidget窗体
        self.setupUi()

    def setupUi(self):
        """页面初始化"""
        # 设置窗体大小及标题
        self.resize(500, 400)
        self.setWindowTitle("QDockWidget组件示例")
        self.setCentralWidget(QTextEdit())   # QMainWindow中央区域设置文本编辑组件

        # QDockWidget组件定义
        self.dockWidget = QDockWidget("浮动窗口")                      # 定义一个QDockWidget组件
        self.button = QPushButton("Button")                          # 定义一个按钮组件
        # QDockWidget组件设置
        self.dockWidget.setWidget(self.button)                       # 将按钮组件添加到浮动窗体上
        self.dockWidget.setFloating(False)                           # 设置dockWidget组件不浮动
        # QDockWidget绑定信号
        self.dockWidget.dockLocationChanged.connect(self.on_dockWidget_dockLocationChanged)
        # 将dockWidget组件添加到窗体
        self.addDockWidget(Qt.RightDockWidgetArea, self.dockWidget)  # QMainWindow设置停靠区域

    def on_dockWidget_dockLocationChanged(self, area):
        """位置改变触发槽函数"""
        print("浮动窗口的位置改编为:{}".format(area))


if __name__ == '__main__':
    app = QApplication(sys.argv)
    myMain = QmyMainWindow()
    myMain.show()
    sys.exit(app.exec_())
posted @ 2023-01-16 10:50  测开星辰  阅读(57)  评论(0编辑  收藏  举报