pyqt5-custom dock bar control, supports custom title bar and parent class method to set dock bar control

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_())

 

Guess you like

Origin blog.csdn.net/m0_62653695/article/details/132471295