Я надеялся, что кто-нибудь поможет мне создать собственный виджет строки заголовка для виджета док-станции в программе с графическим интерфейсом PyQt4. Все, что я хочу сделать, это эмулировать точно такой же внешний вид и функцию строки заголовка по умолчанию, но с дополнительной пользовательской кнопкой. Я не смог найти простой способ сделать это, так как не знаю, есть ли виджет строки заголовка по умолчанию, в который я могу добавить что-то, поэтому я сделал собственный виджет строки заголовка док-станции:
from PyQt4 import QtGui, QtCore
class DockTitleBar(QtGui.QFrame):
def __init__(self, parent):
super(DockTitleBar, self).__init__(parent)
# Is this the only way to give the title bar a border?
self.setFrameStyle(QtGui.QFrame.Raised | QtGui.QFrame.StyledPanel)
# Layout for title box
layout = QtGui.QHBoxLayout(self)
layout.setSpacing(1)
layout.setMargin(1)
self.label = QtGui.QLabel(parent.windowTitle())
icon_size = QtGui.QApplication.style().standardIcon(
QtGui.QStyle.SP_TitleBarNormalButton).actualSize(
QtCore.QSize(100, 100))
button_size = icon_size + QtCore.QSize(5, 5)
# Custom button I want to add
self.button = QtGui.QToolButton(self)
self.button.setAutoRaise(True)
self.button.setMaximumSize(button_size)
self.button.setIcon(QtGui.QApplication.style().standardIcon(
QtGui.QStyle.SP_TitleBarContextHelpButton))
self.button.clicked.connect(self.do_something)
# Close dock button
self.close_button = QtGui.QToolButton(self)
self.close_button.setAutoRaise(True)
self.close_button.setMaximumSize(button_size)
self.close_button.setIcon(QtGui.QApplication.style().standardIcon(
QtGui.QStyle.SP_DockWidgetCloseButton))
self.close_button.clicked.connect(self.close_parent)
# Setup layout
layout.addWidget(self.label)
layout.addStretch()
layout.addWidget(self.button)
layout.addWidget(self.close_button)
def do_something(self):
# Do something when custom button is pressed
pass
def close_parent(self):
self.parent().hide()
Кажется, все работает нормально, за исключением случаев, когда док-станция перетаскивается в плавающем состоянии. Обычно есть границы и даже строка заголовка подсвечивается, но в моей дерьмовой версии нет рамки для плавучего дока, поэтому трудно сказать, где он находится, и строка заголовка не подсвечивается. Могу ли я что-то исправить/добавить или я должен делать это совершенно по-другому?