Python PyQt4 Qpainter 活动消息
Posted
技术标签:
【中文标题】Python PyQt4 Qpainter 活动消息【英文标题】:Python PyQt4 Qpainter active message 【发布时间】:2013-10-31 04:26:09 【问题描述】:我试图水平显示我的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
我设法通过简单地使用此代码来应用此代码
Tab = QtGui.QTabWidget()
Tab.setTabBar(FingerTabWidget(width=260,height=28))
一切看起来都与我预期的完全一样,并且工作正常,但是每次我将鼠标悬停在其中一个选项卡上时,我都会不断收到此错误消息。
QPainter::begin: Painter already active
即使它不影响我的程序的功能,我想知道是什么导致了这个错误消息。一个简单的解释就可以了。
【问题讨论】:
【参考方案1】:对painter.begin()
和painter.end()
的调用是多余的,因为它们都是在创建和删除画家时自动完成的。在活跃的画家上重新调用painter.begin()
在技术上是一个错误,这就是您看到这些警告的原因。
如果您只是删除多余的行,错误消息应该会消失。
PS:
解决此问题的另一种方法是省略将self
传递给painter 的构造函数。这会使绘制程序未初始化,因此需要调用 painter.begin(self)
以使其处于活动状态。
因此,总而言之,您应该这样做:
painter = QtGui.QStylePainter()
painter.begin(self)
...
或者只是:
painter = QtGui.QStylePainter(self)
...
【讨论】:
以上是关于Python PyQt4 Qpainter 活动消息的主要内容,如果未能解决你的问题,请参考以下文章