当前位置: 首页 > article >正文

PyQt4学习笔记3】QDockWidget

目录

一、创建一个 QDockWidget

二、常见功能

1. 设置停靠区域

2. 设置浮动窗口

3. 禁用关闭按钮

3. 动态创建和管理多个 QDockWidget

4. 事件处理

5. 使用界面设计器

注意事项

 三、扩展功能

1. 设置停靠位置

2. 设置浮动

3. 禁止关闭

4. 改变标题

5. 更换内容

6. 设置窗口边框


一、创建一个 QDockWidget

QDockWidget 需要与 QMainWindow 一起使用。以下是一个简单的示例,展示如何创建和使用 QDockWidget

import sys
from PyQt4 import QtGui

class DockExample(QtGui.QMainWindow):
    def __init__(self):
        super(DockExample, self).__init__()

        # 创建一个 QDockWidget
        self.dock_widget = QtGui.QDockWidget("Dockable", self)

        # 创建一个 QLabel 作为 QDockWidget 的内容
        self.label = QtGui.QLabel(u"这是 QDockWidget 的内容区域", self.dock_widget)

        # 将 QLabel 设置为 QDockWidget 的主控件
        self.dock_widget.setWidget(self.label)

        # 将 QDockWidget 添加到 QMainWindow 中
        self.addDockWidget(QtGui.Qt.LeftDockWidgetArea, self.dock_widget)

        # 设置窗口标题和大小
        self.setWindowTitle("QDockWidget 示例")
        self.resize(800, 600)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    window = DockExample()
    window.show()
    sys.exit(app.exec_())

二、常见功能

1. 设置停靠区域

QDockWidget 可以停靠在 QMainWindow 的边缘,包括顶部、底部、左侧和右侧。可以通过 addDockWidget() 的第二个参数指定停靠位置:

self.addDockWidget(QtGui.Qt.TopDockWidgetArea, self.dock_widget)  # 停靠在顶部
self.addDockWidget(QtGui.Qt.BottomDockWidgetArea, self.dock_widget)  # 停靠在底部
self.addDockWidget(QtGui.Qt.LeftDockWidgetArea, self.dock_widget)  # 停靠在左侧
self.addDockWidget(QtGui.Qt.RightDockWidgetArea, self.dock_widget)  # 停靠在右侧

2. 设置浮动窗口

可以通过 setFloating() 方法将 QDockWidget 设置为浮动窗口:

self.dock_widget.setFloating(True)  # 设置为浮动窗口

3. 禁用关闭按钮

默认情况下,QDockWidget 会显示一个关闭按钮。可以通过 setFeatures() 方法禁用它:

self.dock_widget.setFeatures(QtGui.QDockWidget.DockWidgetFloatable | QtGui.QDockWidget.DockWidgetMovable)

3. 动态创建和管理多个 QDockWidget

可以动态创建多个 QDockWidget,并将其添加到主窗口中:

def add_new_dock(self):
    new_dock = QtGui.QDockWidget("New Dock", self)
    new_label = QtGui.QLabel("这是新的 QDockWidget", new_dock)
    new_dock.setWidget(new_label)
    self.addDockWidget(QtGui.Qt.RightDockWidgetArea, new_dock)

调用 add_new_dock() 方法即可添加新的 QDockWidget

4. 事件处理

QDockWidget 继承自 QWidget,因此可以对其进行事件处理,例如鼠标点击事件:

def on_dock_clicked(self):
    print("QDockWidget 被点击了")

self.dock_widget.clicked.connect(self.on_dock_clicked)

5. 使用界面设计器

如果你使用 PyQt 的界面设计器(如 Qt Designer),也可以直接在设计器中拖放 QDockWidget,然后生成代码。

注意事项

  1. 依赖 QMainWindowQDockWidget 必须与 QMainWindow 一起使用,无法单独使用。

  2. 停靠区域管理QDockWidget 的停靠区域可以动态调整,用户可以通过拖动将其移动到不同的位置。

  3. 功能限制:如果需要更复杂的 UI 布局,可能需要结合其他组件(如 QTabWidget)来实现。

 三、扩展功能

1. 设置停靠位置

如果希望 QDockWidget 只能在某个区域停靠,可以使用 setAllowedAreas() 方法。例如:

self.dock.setAllowedAreas(QtCore.Qt.TopDockWidgetArea)

2. 设置浮动

如果希望 QDockWidget 初始状态为悬浮的窗口,可以使用 setFloating(True)

self.dock.setFloating(True)

3. 禁止关闭

如果希望 QDockWidget 不显示关闭按钮,可以使用 setFeatures() 方法:

self.dock.setFeatures(QtGui.QDockWidget.DockWidgetFloatable | QtGui.QDockWidget.DockWidgetMovable)

4. 改变标题

可以随时调用 setWindowTitle() 方法来动态修改 QDockWidget 的标题:

self.dock.setWindowTitle("新的标题")

5. 更换内容

如果需要动态更换 QDockWidget 中的内容,可以通过 setWidget() 方法重新设置。

6. 设置窗口边框

# 创建停靠窗口
dockWidget = QtGui.QDockWidget("Dock Widget", self)

# 创建一个 QLabel 作为 QDockWidget 的内容
self.label = QtGui.QLabel(u"这是 QDockWidget 的内容区域", dockWidget)
# 设置 QLabel 的背景色
self.label.setStyleSheet("background-color: #4CAF50;")
dockWidget.setWidget(self.label)

dockWidget.setStyleSheet("""
    /*  设置QDockWidget导航栏的边框 */
    QDockWidget#dockWidget {
        background-color: lightblue;     /* 设置背景颜色 */
        border: 2px solid black;        /* 设置边框 */
        border-radius: 5px;             /* 设置边框圆角 */
    }
    /*  在停靠和浮动时设置QDockWidget边框 */
    QDockWidget > QWidget {
        border: 5px solid purple;
    }
""")

 ------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。


http://www.kler.cn/a/532862.html

相关文章:

  • 【1】快手面试题整理
  • C++哈希表深度解析:从原理到实现,全面掌握高效键值对存储
  • 从0开始使用面对对象C语言搭建一个基于OLED的图形显示框架(OLED设备层封装)
  • 悬浮按钮和可交互提示的使用
  • OpenAI 实战进阶教程 - 第二节:生成与解析结构化数据:从文本到表格
  • java练习(5)
  • 基于多智能体强化学习的医疗AI中RAG系统程序架构优化研究
  • Linux的简单使用和部署4asszaaa0
  • 探索 Copilot:开启智能助手新时代
  • Django框架的全面指南:从入门到高级
  • HarmonyOS_如何字体跟随系统
  • MySQL适合创建索引的11种情况
  • DeepSeek 的含金量还在上升
  • 2025新时代 | 分析并解决企业跨域问题
  • 两种文件类型(pdf/图片)打印A4半张纸方法
  • Windows电脑本地部署运行DeepSeek R1大模型(基于Ollama和Chatbox)
  • 数据结构 栈 C++ 蓝桥杯
  • unordered_map/set的哈希封装
  • 模型蒸馏原理介绍
  • 驰骋数据源设计与基础概念
  • 洛谷 P1387 最大正方形 C语言
  • 如何安全地管理Spring Boot项目中的敏感配置信息
  • C#中的if判断语句详解
  • DeepSeek本地部署的一些使用体会
  • Linux 系统上安装 Docker 并进行配置
  • OpenAI新商标申请曝光:AI硬件、机器人、量子计算全线布局?