pyqt5-自定义停靠栏控件,支持自定义标题栏和父类方法设置停靠栏的控件

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon, QFont
from PyQt5.QtWidgets import QDockWidget, QMainWindow, QHBoxLayout, QLabel, QPushButton, QListWidget, QWidget, \
    QApplication, QTextEdit, QComboBox


class DockWidget(QDockWidget):
    hide_dock_tool_tip = "隐藏"

    def __init__(self, title: str, parent: QMainWindow = None):
        super().__init__(title, parent)
        self.dock_title = title

    # 初始化标题栏控件
    def init_title_bar_widget(self, title_bar_widget_list: list[QWidget] = ()):
        # 定义标题栏布局
        title_bar_layout = QHBoxLayout()
        # 设置内容边距
        title_bar_layout.setContentsMargins(0, 7, 0, 7)
        # 设置间距
        title_bar_layout.setSpacing(3)

        # 停靠栏标题标签
        self.dock_title_label = QLabel(self.dock_title)
        # 隐藏停靠栏按钮
        self.hide_dock_button = QPushButton(QIcon("hide.jpg"), "", self)
        self.hide_dock_button.setToolTip(self.hide_dock_tool_tip)

        # 布局添加
        title_bar_layout.addWidget(self.dock_title_label)
        title_bar_layout.addStretch()

        for widget in title_bar_widget_list:  # 遍历标题栏控件列表
            title_bar_layout.addWidget(widget, alignment=Qt.AlignRight)

        title_bar_layout.addWidget(self.hide_dock_button, alignment=Qt.AlignRight)

        # 定义标题栏控件
        title_bar_widget = QWidget(self)
        # 设置标题栏控件的布局
        title_bar_widget.setLayout(title_bar_layout)

        # 设置标题栏控件
        self.setTitleBarWidget(title_bar_widget)

    # 初始化内容部件
    def init_content_widget(self, widget: QWidget = None):
        self.setWidget(widget)


class HelloCustomDockWidget(DockWidget):
    def __init__(self, title: str, parent: QMainWindow = None):
        super().__init__(title, parent)

        # # 初始化标题栏控件
        combo_box = QComboBox()
        combo_box.addItems(["Apple", "blue", "Cat"])

        self.init_title_bar_widget([combo_box])

        # 初始化内容部件
        self.init_content_widget(QListWidget())


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        self.setCentralWidget(QTextEdit())
        dock = HelloCustomDockWidget("你好", self)
        self.addDockWidget(Qt.LeftDockWidgetArea, dock)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MainWindow()
    window.setFont(QFont("Arial", 12))
    window.show()
    sys.exit(app.exec_())

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值