![](/img/trans.png)
[英]Painting on a widget that contains a QGridLayout in PySide/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.