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