# coding: utf-8 from PySide6.QtCore import Qt from PySide6.QtGui import QIcon from PySide6.QtWidgets import QLabel, QHBoxLayout, QVBoxLayout from qframelesswindow import TitleBar class CustomTitleBar(TitleBar): """ Title bar with icon and title """ def __init__(self, parent): super().__init__(parent) self.setFixedHeight(48) self.hBoxLayout.removeWidget(self.minBtn) self.hBoxLayout.removeWidget(self.maxBtn) self.hBoxLayout.removeWidget(self.closeBtn) # add window icon self.iconLabel = QLabel(self) self.iconLabel.setFixedSize(18, 18) self.hBoxLayout.insertSpacing(0, 10) self.hBoxLayout.insertWidget(1, self.iconLabel, 0, Qt.AlignLeft | Qt.AlignVCenter) self.window().windowIconChanged.connect(self.setIcon) # add title label self.titleLabel = QLabel(self) self.hBoxLayout.insertWidget(2, self.titleLabel, 0, Qt.AlignLeft | Qt.AlignVCenter) self.titleLabel.setObjectName('titleLabel') self.window().windowTitleChanged.connect(self.setTitle) self.vBoxLayout = QVBoxLayout() self.buttonLayout = QHBoxLayout() self.buttonLayout.setSpacing(0) self.buttonLayout.setContentsMargins(0, 0, 0, 0) self.buttonLayout.setAlignment(Qt.AlignTop) self.buttonLayout.addWidget(self.minBtn) self.buttonLayout.addWidget(self.maxBtn) self.buttonLayout.addWidget(self.closeBtn) self.vBoxLayout.addLayout(self.buttonLayout) self.vBoxLayout.addStretch(1) self.hBoxLayout.addLayout(self.vBoxLayout, 0) def setTitle(self, title): self.titleLabel.setText(title) self.titleLabel.adjustSize() def setIcon(self, icon): self.iconLabel.setPixmap(QIcon(icon).pixmap(18, 18))