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

 

おすすめ

転載: blog.csdn.net/m0_62653695/article/details/132471295