我正在尝试通过QProxyStyle
.
我创建了一个StyleCustom
类,该类drawControl
根据选项卡状态将选项卡绘制为红色或绿色,并在其顶部添加文本。
但是,使用option.text
给我以下错误:
AttributeError: 'PySide2.QtWidgets.QStyleOption' object has no attribute 'text'
我注意到这里应该是option
QStyleOptionTab如果我没记错的话。QStyleOption
如果我评论该drawText
命令,则不会崩溃,但选项卡未按应有颜色显示:
我觉得不知何故,该drawControl
方法没有正确接收选项。在尝试绘制其他控件类型时,我注意到了类似的行为。
这是一个使用 a 的基本示例QTabWidget
:
from PySide2 import QtWidgets, QtGui, QtCore
class StyleCustom(QtWidgets.QProxyStyle):
def drawControl(self, element: QtWidgets.QStyle.ControlElement, option: QtWidgets.QStyleOption, painter: QtGui.QPainter, widget:QtWidgets.QWidget=None):
if element == QtWidgets.QStyle.ControlElement.CE_TabBarTabLabel:
if option.state == QtWidgets.QStyle.State_Selected:
painter.save()
painter.fillRect(option.rect, QtGui.QBrush("#ff0000"))
painter.restore()
else:
painter.save()
painter.fillRect(option.rect, QtGui.QBrush("#00ff00"))
painter.restore()
painter.drawText(option.rect, QtCore.Qt.AlignCenter, option.text)
else:
return super().drawControl(element, option, painter, widget)
class MyMainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.tab = QtWidgets.QTabWidget()
self.widg_1 = QtWidgets.QWidget()
self.widg_2 = QtWidgets.QWidget()
self.setCentralWidget(self.tab)
self.tab.addTab(self.widg_1, "test1")
self.tab.addTab(self.widg_2, "test2")
if __name__=='__main__':
app = QtWidgets.QApplication()
app.setStyle(StyleCustom())
window = MyMainWindow()
window.show()
app.exec_()