How to change text alignment in QTabWidget?

后端 未结 2 1506
暗喜
暗喜 2020-12-01 09:59

I cannot find a way to set the text alignment in a QTabWidget.

After I\'ve created an instance of this widget, I\'ve set its tabPosition property to West,

相关标签:
2条回答
  • 2020-12-01 10:25

    To get you started, you need to create a custom class that is a subclass of QtGui/QTabWidget and redefine the painting method:

    class HorizontalTabWidget(QtGui.QTabWidget):
       def paintEvent(self, event):
          QPainter p;
          p.begin(this);
          # your drawing code goes here
          p.end();
    

    Here's the documentation for QWidget.paintEvent method that you are reimplementing.

    Of course you need to know how painting works in general, please refer to the documentation for QPainter.

    Unfortunately I don't have a PyQt installation handy at the moment, so I can't give you a more specific solution.

    0 讨论(0)
  • 2020-12-01 10:47

    I've put a worked example together on GitHub that solves this here: https://gist.github.com/LegoStormtroopr/5075267

    The code is copied across as well:

    Minimal example.py:

    from PyQt4 import QtGui, QtCore
    from FingerTabs import FingerTabWidget
    
    import sys
    
    app = QtGui.QApplication(sys.argv)
    tabs = QtGui.QTabWidget()
    tabs.setTabBar(FingerTabWidget(width=100,height=25))
    digits = ['Thumb','Pointer','Rude','Ring','Pinky']
    for i,d in enumerate(digits):
        widget =  QtGui.QLabel("Area #%s <br> %s Finger"% (i,d))
        tabs.addTab(widget, d)
    tabs.setTabPosition(QtGui.QTabWidget.West)
    tabs.show()
    sys.exit(app.exec_())
    

    FingerTabs.py:

    from PyQt4 import QtGui, QtCore
    
    class FingerTabWidget(QtGui.QTabBar):
        def __init__(self, *args, **kwargs):
            self.tabSize = QtCore.QSize(kwargs.pop('width'), kwargs.pop('height'))
            super(FingerTabWidget, self).__init__(*args, **kwargs)
    
        def paintEvent(self, event):
            painter = QtGui.QStylePainter(self)
            option = QtGui.QStyleOptionTab()
    
            for index in range(self.count()):
                self.initStyleOption(option, index)
                tabRect = self.tabRect(index)
                tabRect.moveLeft(10)
                painter.drawControl(QtGui.QStyle.CE_TabBarTabShape, option)
                painter.drawText(tabRect, QtCore.Qt.AlignVCenter |\
                                 QtCore.Qt.TextDontClip, \
                                 self.tabText(index));
    
        def tabSizeHint(self,index):
            return self.tabSize
    
    0 讨论(0)
提交回复
热议问题