繁体   English   中英

绘制PyQt小部件背景时出现意外消息

[英]Unexpected message when painting PyQt widget background

为什么我收到此消息QPainter::begin: Painter already active当我运行此代码时, QPainter::begin: Painter already active在控制台中QPainter::begin: Painter already active

from PyQt4.QtGui import * 
from PyQt4.QtCore import * 
import sys


class MyRoundWidget(QWidget):

    def __init__(self, master=None):
        super(MyRoundWidget,self).__init__(master)
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.setWindowTitle("QLinearGradient Vertical Gradient ")
        self.setAttribute(Qt.WA_TranslucentBackground)        

    def paintEvent(self, ev):
        painter = QPainter(self)
        painter.begin(self)
        gradient = QLinearGradient(QRectF(self.rect()).topLeft(),QRectF(self.rect()).bottomLeft())
        gradient.setColorAt(0.0, Qt.black)
        gradient.setColorAt(0.4, Qt.gray)
        gradient.setColorAt(0.7, Qt.black)
        painter.setBrush(gradient)
        painter.drawRoundedRect(self.rect(), 10.0, 10.0)
        painter.end()


def main():    
    app     = QApplication(sys.argv)
    widget = MyRoundWidget()    
    widget.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

我的代码有问题吗?

def paintEvent(self, ev):
    painter = QPainter(self)
    gradient = QLinearGradient(QRectF(self.rect()).topLeft(),QRectF(self.rect()).bottomLeft())
    gradient.setColorAt(0.0, Qt.black)
    gradient.setColorAt(0.4, Qt.gray)
    gradient.setColorAt(0.7, Qt.black)
    painter.setBrush(gradient)
    painter.drawRoundedRect(self.rect(), 10.0, 10.0)

删除painter.begin(self)painter.end()

根据Qt文档

请注意,大多数情况下,您可以使用其中一个构造函数而不是begin(),并且end()在销毁时自动完成。

警告:油漆设备一次只能由一个画家绘画。

所以,如果你使用painter = QPainter(self)来构造一个画家,那么就没有必要调用begin()end() 这将是重复的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM