Wie Textausrichtung in QTabWidget ändern?
-
25-09-2019 - |
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:)
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