Frage

Ich kann nicht einen Weg, um die Textausrichtung in einem QTabWidget finden.

Nachdem ich eine Instanz dieses Widget erstellt haben, ich habe seine gesetzt TabPosition Immobilien nach West, aber ich wünschte, es zeigte sich horizontal Text / label. Ich habe einen Blick auf die Sheets , aber wie Sie sehen kann, die text-align Eigenschaft kann nur auf QPushButton und QProgressBar eingestellt werden.

Ich suchte schon auf dem Netz, aber ich habe gerade einen bugreport , ein nicht beantworteten Frage und schließlich ein Benutzer , die die Methode paint () neu zu implementieren schlägt vor, . Ich würde vielleicht lösen, aber ich bin mit Python (PyQt oder pyside) und ich weiß nicht, wie es zu tun.

Können Sie mir helfen?

EDIT: dank Teukamm, schrieb ich ein Stück Code:

from PyQt4 import QtGui, QtCore

class HorizontalTabWidget(QtGui.QTabBar):
    def paintEvent(self, event):
        for index in range(self.count()):
            painter = QtGui.QPainter()
            painter.begin(self)
            painter.setPen(QtCore.Qt.blue);
            painter.setFont(QtGui.QFont("Arial", 10));
            tabRect = self.tabRect(index)
            painter.drawText(tabRect, QtCore.Qt.AlignVCenter | QtCore.Qt.TextDontClip, self.tabText(index));
            painter.end()

     def sizeHint(self):
         return QtCore.QSize(60, 130)

import sys
app = QtGui.QApplication(sys.argv)
tabs = QtGui.QTabWidget()
tabs.setTabBar(HorizontalTabWidget())
widget1 =  QtGui.QWidget()
widget2 =  QtGui.QWidget()
tabs.addTab(widget1, "Widget1")
tabs.addTab(widget2, "Widget2")
tabs.setTabPosition(2)
tabs.show()
sys.exit(app.exec_())

Und schließlich habe ich meinen Text ausgerichtet, wie ich erwartet hatte, aber ich habe ein kleines Problem (groß?): Wenn Sie auf der rechten Seite jeder Tab-Taste klicken, wird es nicht die Current SIGNAL . Ich habe auch versucht, die Breite jedes tabRect, in paintEventO zu erweitern, aber es funktioniert nicht. Was sollte ich ändern?

Danke:)

BTW: Sie nicht von QTabWidget erben konnten, aber von QTabBar;)

EDIT:

Gelöst! Nur die Methode geändert sizeHint in tabSizeHint und es funktioniert gut:)

War es hilfreich?

Lösung

Um Ihnen den Einstieg, müssen Sie eine benutzerdefinierte Klasse erstellen, die eine Unterklasse von QtGui / QTabWidget ist und definieren die Malweise:

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

Hier ist die Dokumentation für QWidget.paintEvent Methode, dass Sie die Neuimplementierung.

Natürlich müssen Sie wissen, wie funktioniert im Allgemeinen Malerei finden Sie in der Dokumentation zu QPainter .

Leider habe ich keine PyQt Installation praktisch im Moment, so kann ich nicht geben Sie eine spezifische Lösung.

Andere Tipps

Ich habe ein ausgearbeitetes Beispiel zusammen auf GitHub setzen, dass löst hier um die https: // Kern. github.com/LegoStormtroopr/5075267

Der Code über als auch kopiert wird:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top