
我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈

QDockWidget 浮动窗口控件
- 描述
- QDockWidget停靠窗口控件来实现浮动窗口的功能
- QDockWidget停靠窗口控件一般使用在QMainWindow中,它是放置在QMainWindow中的中央窗口小部件周围的停靠窗口小部件区域中的次要窗口
- QDockWidget可以在主窗口的四个边缘停靠,用户可以通过拖动和放置QDockWidget到主窗口的边缘来创建和定位布局
- QDockWidget常用于显示工具栏、属性编辑器、文件浏览器等工具
- 注意事项:
- 1、QDockWidget只能添加一个子控件,如果需要放多个控件,可以将多个控件放在一个QWidget内,然后再将整个QWidget放在QDockWidget中
- 2、QMainWindow需要设置中心区域控件,否则QDockWidget会占满整个屏幕,看不出效果
- 继承自:
- 功能作用
- 构造函数
QDockWidget(parent, flags) # 创建对象的同时设置父对象,并设置窗口标志 QDockWidget(title, parent, flags) # 创建对象的同时设置窗口标题和父对象,并设置窗口标志 # 参数 flags # Qt.MSWindowsFixedSizeDialogHint # 窗口无法调整大小 # Qt.FramelessWindowHint # 窗口无边框 # Qt.CustomizeWindowHint # 有边框但无标题栏和按钮,不能移动和拖动。 # Qt.WindowTitleHint # 添加标题栏和一个不可用的关闭按钮 # Qt.WindowSystemMenuHint # 添加系统目录和一个关闭按钮 # Qt.WindowMaximizeButtonHint # 激活最大化和关闭按钮,禁止最小化按钮 # Qt.WindowMinimizeButtonHint # 激活最小化和关闭按钮,禁止最大化按钮 # Qt.WindowMinMaxButtonsHint # 激活最小化,最大化和关闭按钮 # Qt.WindowCloseButtonHint # 添加一个关闭按钮 # Qt.WindowContextHelpButtonHint # 添加问号和关闭按钮,同对话框 # Qt.WindowStaysOnTopHint # 窗口始终处于顶层位置(QQ登录界面) # Qt.WindowStaysOnBottomHint # 窗口始终处于底层位置 - 添加控件
setWidget() # 在Dock窗口区域设置QWidget - 窗口浮动
setFloating() # 设置Dock窗口是否可以浮动 - 窗口标题栏控件
setTitleBarWidget(QWidget) # 设置停靠窗口标题栏控件 - 停靠区域
setAllowedAreas(Qt.DockWidgetAreas) # 设置窗口可以停靠的区域 # 参数 Qt.DockWidgetAreas # Qt.LeftDockWidgetArea # 窗口可在左侧停靠; # Qt.RightDockWidgetArea # 窗口可在右侧停靠; # Qt.TopDockWidgetArea # 窗口可在顶端停靠; # Qt.BottomDockWidgetArea # 窗口可在底端停靠; # Qt.AllDockWidgetArea # 窗口可在任意方向停靠; # Qt.NoDockWidgetArea # 只可停靠在插入处 - 窗口关闭、浮动、移动属性
setFeatures(QDockWidget.DockWidgetFeatures) # 设置停靠窗口的功能属性 # 参数 QDockWidget.DockWidgetFeatures # QDockWidget.DockWidgetClosable # 允许关闭,在一些系统上会显示一个关闭按钮; # QDockWidget.DockWidgetMovable # 允许在Dock之间移动; # QDockWidget.DockWidgetFloatable # 允许作为一个独立窗口浮动; # QDockWidget.DockWidgetVerticalTitleBar # 在Dock左侧显示一个垂直标题栏; # QDockWidget.AllDockWidgetFeatures # 具有前三种属性的所有功能; # QDockWidget.NoDockWidgetFeatures # 无具体特性设置,无法关闭、移动或者浮动
- 构造函数
- QMainWindow提供了一系列函数来管理和操控QDockWidget
addDockWidget(Qt.DockWidgetArea, QDockWidget) # 添加一个给定的停靠窗口到指定区域 addDockWidget(Qt.DockWidgetArea, QDockWidget, Qt.Orientation) # 添加一个给定的停靠窗口到指定区域 # 参数 Qt.DockWidgetAreas # Qt.LeftDockWidgetArea # 窗口可在左侧停靠; # Qt.RightDockWidgetArea # 窗口可在右侧停靠; # Qt.TopDockWidgetArea # 窗口可在顶端停靠; # Qt.BottomDockWidgetArea # 窗口可在底端停靠; # Qt.AllDockWidgetArea # 窗口可在任意方向停靠; # Qt.NoDockWidgetArea # 只可停靠在插入处 # 参数 Qt.Orientation # Qt.Horizontal # 水平方向 # Qt.Vertical # 垂直方向 splitDockWidget(QDockWidget, QDockWidget, Qt.Orientation) # 把两个dock进行左右或上下并排布置,做成一个类似QSplitter的功能 # 参数 Qt.Orientation # Qt.Horizontal # 水平方向 # Qt.Vertical # 垂直方向 tabifyDockWidget(QDockWidget, QDockWidget) # 移动第二个停靠窗口到第一个停靠窗口 # 可以在主窗口中生成一个标签样式的停靠窗口 tabifiedDockWidgets(QDockWidget) # 返回和指定停靠窗口形成标签样式的停靠窗口列表 removeDockWidget(QDockWidget) # 从主窗口布局中移除停靠窗口,并隐藏它 # 注意,停靠窗口并不会被删除 restoreDockWidget(QDockWidget) # 恢复停靠窗口的状态 dockWidgetArea(QDockWidget) # 返回指定停靠窗口的停靠区域,返回值为Qt. DockWidgetArea的相关取值 resizeDocks(Iterable[QDockWidget], Iterable[int], Qt.Orientation) # 改变指定停靠窗口列表的尺寸 setDockNestingEnabled(bool) # 设置停靠窗口是否可以嵌套 isDockNestingEnabled() -> bool # 返回停靠窗口是否有可嵌套的特性 setDockOptions(QMainWindow.DockOptions) # 设置停靠窗口的停靠属性 # 参数 QMainWindow.DockOptions # QMainWindow.AnimatedDocks # 动画方式停靠 # QMainWindow.AllowNestedDocks # 允许嵌套 # QMainWindow.AllowTabbedDocks # 允许标签页方式停靠 # QMainWindow.ForceTabbedDocks # 强制标签页方式停靠 # QMainWindow.VerticalTabs # 垂直标签页方式 # QMainWindow.GroupedDragging # 允许成组拖动标签页停靠窗口
- 可用信号
allowedAreasChanged(allowedAreas) # 停靠窗口的允许停靠区域发生了改变时,发射该信号 dockLocationChanged(area) # 停靠窗口的位置发生了改变时,发射该信号 featuresChanged(features) # 停靠窗口的特性发生了改变时,发射该信号 topLevelChanged(topLevel) # 停靠窗口的浮动属性发生了改变时,发射该信号 visibilityChanged(visible) # 停靠窗口的可视属性(显示/隐藏)发生改变时,发射该信号
- 示例代码
- 示例1:通过QWidget将多个子控件添加到QDockWidget控件中
from PyQt5.Qt import * import sys class Windows(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('QDockWidget') self.resize(500, 300) self.widget_list() def widget_list(self): self.add_widget() def add_widget(self): # 创建QDockWidget控件 dockw = QDockWidget('浮动框1') # 创建QWidget控件,用做QDockWidget子控件,承载多个其他控件 sub_w = QWidget() # 将QWidget控件绑定给QDockWidget控件 dockw.setWidget(sub_w) # 给QMainWindow主窗口中间区域设置控件 self.setCentralWidget(QTextEdit()) # 将QDockWidget控件添加到QMainWindow主窗口左侧 self.addDockWidget(Qt.LeftDockWidgetArea, dockw) # 创建一批子控件 btn1 = QPushButton('按钮1') btn2 = QPushButton('按钮2') btn3 = QPushButton('按钮3') cmb = QComboBox() cmb.addItems(['北京','上海','深圳','广东','香港','澳门']) # 创建一个垂直布局,用于给sub_w布局 hlayout = QVBoxLayout() hlayout.addWidget(btn1) hlayout.addWidget(btn2) hlayout.addWidget(btn3) hlayout.addWidget(cmb) # 将布局绑定给sub_w控件 sub_w.setLayout(hlayout) if __name__ == '__main__': app = QApplication(sys.argv) window = Windows() window.show() sys.exit(app.exec_()) - 示例2:通过QDockWidget控件信号,完善上面布局
- 本案例意在通过QDockWidget改变停靠区域触发dockLocationChanged信号,对QDockWidget中的QWidget控件重新布局
- 但是并没有达到效果,还未找到原因
from PyQt5.Qt import * import sys class Windows(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('QDockWidget') self.resize(500, 300) self.widget_list() def widget_list(self): self.add_widget() def add_widget(self): # 创建QDockWidget控件 self.dockw = QDockWidget('浮动框1') # 创建QWidget控件,用做QDockWidget子控件,承载多个其他控件 self.sub_w = QWidget() # 将QWidget控件绑定给QDockWidget控件 # 给QMainWindow主窗口中间区域设置控件 self.setCentralWidget(QTextEdit()) # 将QDockWidget控件添加到QMainWindow主窗口左侧 self.addDockWidget(Qt.LeftDockWidgetArea, self.dockw) # 创建一批子控件 btn1 = QPushButton('按钮1') btn2 = QPushButton('按钮2') btn3 = QPushButton('按钮3') cmb = QComboBox() cmb.addItems(['北京','上海','深圳','广东','香港','澳门']) self.sub_ls = [btn1, btn2, btn3, cmb] self.create_layout(1) self.dockw.dockLocationChanged.connect(self.locationchang) def locationchang(self, area): self.create_layout(area) def create_layout(self, area): # 创建一个垂直布局,用于给sub_w布局 if area == 1 or area == 2: layout = QVBoxLayout() elif area == 0 or area == 4 or area == 8: layout = QHBoxLayout() self.sub_win_layout(layout) def sub_win_layout(self, layout): for sub_wd in self.sub_ls: # print(sub_w) layout.addWidget(sub_wd) # 将布局绑定给sub_w控件 self.sub_w.setLayout(layout) self.dockw.setWidget(self.sub_w) print('重新布局结束') if __name__ == '__main__': app = QApplication(sys.argv) window = Windows() window.show() sys.exit(app.exec_())
QDockWidget是Qt库中的一个组件,常用于在QMainWindow中创建可停靠或浮动的窗口。它可以添加到窗口的边缘,支持用户自定义停靠位置和窗口特性,如最小化、最大化、关闭等。文章介绍了QDockWidget的基本使用方法,包括构造函数、窗口特征设置、添加控件、停靠区域管理等功能,并提供了两个示例代码,展示如何创建和管理QDockWidget以及响应其位置变化的布局更新。

3089

被折叠的 条评论
为什么被折叠?



