我无法找到一种方法来设定该案文对在一个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;)

编辑:

解决了!只是改变的方法 sizeHinttabSizeHint 它工作好了:)

有帮助吗?

解决方案

让你开始,则需要创建一个自定义类的一个亚类的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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top