如何改变文本的准在QTabWidget?
-
25-09-2019 - |
题
我无法找到一种方法来设定该案文对在一个QTabWidget.
之后我已经创建了一个的实例,这个小部件,我已经设置它 tabPosition 酒店往西,但我希望这表明的文本/标签的水平。我已经给了一个看到夸脱的 样式, 但正如你可以看到, 文本对齐 财产只能设置在QPushButton和QProgressBar.
我已经搜查了上网,但我只是发现了一个 bug报告, , 非回答问题, 和最后 一个用户 这表明重新实现的油漆()方法。也许我会解决,但是,我使用的是蟒蛇(PyQt或PySide)我不知道如何做到这一点。
你能帮帮我吗?
编辑:由于Teukamm,我写了一点代码:
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_())
最后我我的文字,对准正如我预期的,但我一点(大?) 问题:当你点击左边的每一个标签的按钮,它不送 currentChanged 信号.我还试图扩大宽度的每tabRect,在paintEvent,但是它不工作。我应该怎么改变?
谢谢你:)
顺便说一句:你不能继承自QTabWidget,但从QTabBar;)
编辑:
解决了!只是改变的方法 sizeHint 在 tabSizeHint 它工作好了:)
解决方案
让你开始,则需要创建一个自定义类的一个亚类的QtGui/QTabWidget和重新定义的绘画方法:
class HorizontalTabWidget(QtGui.QTabWidget):
def paintEvent(self, event):
QPainter p;
p.begin(this);
# your drawing code goes here
p.end();
这里的 文件QWidget.paintEvent 方法,你们重新实现.
当然,你需要知道如何绘画作品,在一般情况下,请参阅文件 QPainter.
不幸的是我没有PyQt安装方便的时刻,使我不能给你一个更具体的解决方案。
其他提示
我已经把一个成功范例一起在审查解决这个在这里: https://gist.github.com/LegoStormtroopr/5075267
代码复制跨:
最小的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