Python PyQt4 qpaiter活动消息

2024-10-03 02:46:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图水平显示QTabWidget文本,并将Tabposition设置为2(左侧)。在四处搜索之后,我从this link找到了以下代码。在

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()

        painter.begin(self)
        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));
        painter.end()
    def tabSizeHint(self,index):
        return self.tabSize

我只是简单地使用了这个代码

^{pr2}$

一切看起来都和我预期的一样,工作正常,但我一直收到这个错误消息,每次我鼠标在其中一个标签。在

QPainter::begin: Painter already active

即使它不影响我的程序的功能,我想知道是什么引起了这个错误消息。简单的解释就可以了。在


Tags: 代码selfindexinitdefargspopkwargs
1条回答
网友
1楼 · 发布于 2024-10-03 02:46:38

painter.begin()和{}的调用是多余的,因为这两个调用都是在创建和删除painter时自动完成的。在活动painter上重新调用painter.begin()从技术上讲是一个错误,这就是为什么您看到这些警告。在

如果您只需删除多余的行,错误消息就会消失。在

附言:

解决这个问题的另一种方法是省略将self传递给painter的构造函数。这将使painter未初始化,因此需要调用painter.begin(self)使其处于活动状态。在

因此,总而言之,您应该:

    painter = QtGui.QStylePainter()
    painter.begin(self)
    ...

或者只是:

^{pr2}$

相关问题 更多 >