すべてのタブに独自の背景色があるように、QTabWidget をカスタマイズしたいと考えています。これはスタイルシートではできないことを知っているので、QTabBar をサブクラス化し、それを paintEvent に変更しました。次に、QTabWidget のデフォルトの QTabBar を独自の実装に置き換えました。ただし、タブの背景色は変わりません。私が欠けているものを誰か知っていますか?
これは私の問題を説明する小さなデモアプリケーションです:
from PyQt4 import QtGui
import sys
class coloredTabBar(QtGui.QTabBar):
def __init__(self, parent = None):
QtGui.QTabBar.__init__(self, parent)
def paintEvent(self, event):
p = QtGui.QStylePainter(self)
painter = QtGui.QPainter(self)
for index in range(self.count()): #for all tabs
tab = QtGui.QStyleOptionTabV3() #create styled tab
self.initStyleOption(tab, index) #initialize with default values
#change background color to red
tab.palette.setColor(QtGui.QPalette.Base, QtGui.QColor(255, 0, 0))
p.drawControl(QtGui.QStyle.CE_TabBarTab, tab) #draw tab
class coloredTabWidget(QtGui.QTabWidget):
def __init__(self, parent = None):
QtGui.QTabWidget.__init__(self, parent)
coloredTabs = coloredTabBar()
self.setTabBar(coloredTabs) #replace default tabBar with my own implementation
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
tabWidget = coloredTabWidget()
tabWidget.addTab(QtGui.QWidget(), "Hello")
tabWidget.addTab(QtGui.QWidget(), "World")
tabWidget.show()
sys.exit(app.exec_())
敬具
ベルンハルト