【问题标题】:PyQT: Silly QPainter.drawEllipsePyQT:愚蠢的 QPainter.drawEllipse
【发布时间】:2011-09-20 15:42:01
【问题描述】:

我盯着代码看的时间越长,我对它的理解就越少,但它变得越有趣。在一种情况下,QPainter 会绘制圆圈,而在另一种情况下则不会。

我的问题是,如果成功,QPainter 不会绘制。另一方面,如果它不成功,它确实画。我真正想要实现的是根据状态改变颜色。这个相当丑陋的代码是为了说明。将 QP.begin() 移到循环之外或最后在 if 子句之外只有一个 drawEllipse() 没有任何区别。

def paintEvent(self, e):
        # compute here diameter, offsets, etc. but nothing qt related
        for i in xrange(5):
            painter = QtGui.QPainter(self)
            x_offset += 5
            if self.isSuccessful():
                print "Successful"
                painter.setBrush(QtGui.QColor(0,255,0))
                painter.drawEllipse(x_offset, y_offset, diameter, diameter)
            else:
                print "Not yet"
                painter.setBrush(QtGui.QColor(0,0,255))
                painter.drawEllipse(x_offset, y_offset, diameter, diameter)
            painter.end()

有人能告诉我为什么在一种情况下椭圆是实际绘制的,而在另一种情况下却不是?

输出是:

...
还没有
还没有
还没有
还没有
还没有
成功
成功
成功
成功
成功
...

椭圆之前是否绘制过并不重要。如果我在“尚未”的情况下评论 drawEllipse(),则不会绘制圆。

【问题讨论】:

    标签: python pyqt qpainter


    【解决方案1】:

    问题是我创建的paintEvent 的来源。当包含的文本框获得焦点时调用paintEvent。但是事件的更新区域只包括文本框,这确实有意义但我不知道。所以调用了paintEvent,但是更新区域不包括圆圈。

    我现在通过调用整个小部件的更新方法来规避问题,从而解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-07
      • 2011-08-24
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 2010-12-10
      • 2015-07-11
      相关资源
      最近更新 更多