我有一个基本上是一个圆圈的小部件。我想逐步绘制它,所以我需要逐步绘制它(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()
由于新事件是空事件。
所以基本上我的问题是,我应该怎么做才能正确地做到这一点,这意味着没有错误地实现我想要的?
相关分类