使用pyqt5逐步绘制的正确方法

我有一个基本上是一个圆圈的小部件。我想逐步绘制它,所以我需要逐步绘制它(imo)。


使用以下代码,我已经实现了我想要的。然而,有一个问题。我正在向函数传递一个新事件paintEvent,因为如果我不这样做,图像在一切完成之前不会更新,所以我什么都没有实现。


小部件代码

import sys

import time

from PyQt5.QtCore import Qt, QRect

from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox, QDesktopWidget


from PyQt5.QtGui import QPen, QPainter, QPaintEvent, QConicalGradient, QColor, QBrush


class Circle(QWidget):


    def __init__(self, size, color):

        super().__init__()


        self.loadingAngle = 0

        self.width = 0

        self.color = color

        self.pixmap_opacity = 1


        self.resize(size, size);

        self.center()


        self.initUI()


    def initUI(self):


        self.width = 15

        self.loadingAngle = 0

        self.show()


    def center(self):

        qr = self.frameGeometry()

        cp = QDesktopWidget().availableGeometry().center()

        qr.moveCenter(cp)

        self.move(qr.topLeft())


    def paintEvent(self, qevent):


        self.setWindowFlags(Qt.FramelessWindowHint)

        self.setAttribute(Qt.WA_TranslucentBackground)

        self.setStyleSheet("background:transparent;")


        drawingRect = QRect()

        drawingRect.setX(qevent.rect().x() + self.width)

        drawingRect.setY(qevent.rect().y() + self.width)

        drawingRect.setWidth(qevent.rect().width() - self.width * 2)

        drawingRect.setHeight(qevent.rect().height() - self.width * 2)


        painter = QPainter(self)

        painter.setRenderHint(QPainter.Antialiasing)


有问题的线路

self.paintEvent(QPaintEvent())

这条线产生了几个错误,但即使有这些错误,我也会做我想做的。


如果我将qevent函数本身的传递给这个新调用,图像不会像我之前所说的那样更新。


如果我创建这个 new QPaintEvent,它确实有效。但是,错误是:


回溯(最近一次调用最后一次):


文件“/home/btc/Escritorio/SinestesiaRCB/Classes/Widget.py”,第68行,在paintEvent self.paintEvent(QPaintEvent())中


类型错误:参数与任何重载调用不匹配:QPaintEvent(QRegion):参数不足


QPaintEvent(QRect):没有足够的参数


QPaintEvent(QPaintEvent):没有足够的参数


QBackingStore::endPaint() 在 backingstore 绘制设备上使用活动绘制器调用


这些错误可能来自其他行,例如:


qevent.rect().x()

由于新事件是空事件。


所以基本上我的问题是,我应该怎么做才能正确地做到这一点,这意味着没有错误地实现我想要的?


哆啦的时光机
浏览 204回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python