Python 在paintevent中动态更改PyQt5中的QWidget

Python 在paintevent中动态更改PyQt5中的QWidget,python,pyqt5,Python,Pyqt5,嘿,伙计们。 我有一个和上面一样的代码,我希望它也能更新Gui,但我不知道如何更新。self.qt_颜色一直在完美更新,但我不知道如何让它每隔2秒左右用正确的颜色再次绘制QWidget 有什么帮助吗?当您更改self.qt\u color的值时,您必须通过调用update()请求小部件的更新,这将创建一个绘制事件 不要在paintEvent中创建计时器:每次调用函数时,它都会创建一个新的计时器 from PyQt5.QtWidgets import QWidget from PyQt5.QtG

嘿,伙计们。 我有一个和上面一样的代码,我希望它也能更新Gui,但我不知道如何更新。self.qt_颜色一直在完美更新,但我不知道如何让它每隔2秒左右用正确的颜色再次绘制QWidget


有什么帮助吗?

当您更改
self.qt\u color
的值时,您必须通过调用
update()
请求小部件的更新,这将创建一个绘制事件

不要在
paintEvent
中创建计时器:每次调用函数时,它都会创建一个新的计时器

from PyQt5.QtWidgets import  QWidget
from PyQt5.QtGui import QPainter, QBrush, QPen
from PyQt5.QtCore import Qt

class CircleWidget(QWidget):
    def __init__(self, parent = None, color = 'green'):
        super().__init__()
        self.setFixedSize(150, 150)
        self.color = color
        self.qt_color = Qt.green

    def paintEvent(self, event = None):
        qp = QPainter(self)
        qp.setPen(QPen(self.qt_color, 8, Qt.SolidLine))
        qp.setBrush(QBrush(self.qt_color, Qt.SolidPattern))
        qp.drawEllipse(40, 40, 100, 100)
        self.change_color()
        timer = QTimer(self)
        timer.timeout.connect(self.change_color)
        timer.start(2*100)

    def change_color(self):
        if self.color == 'red':
            self.qt_color = Qt.red
        elif self.color == 'green':
            self.qt_color = Qt.green
圆圈将每隔2秒在红色和绿色之间交替出现

'''
谢谢你罗姆哈·科雷夫,根据你写的内容,我用上面的代码编辑了你的答案,现在它工作得很好:)

嘿,伙计,但有一个问题,在我的原始代码中,它做得很好,基于圆圈的颜色应该是绿色,所以基本上它应该是这样工作的:1。根据不同小部件中的人员选择,self.color将更新为“红色”或“绿色”-这是在我之前的代码中正确完成的,如果这是问题2的话。基于每2秒一次的self.color,self.qt_颜色应更新为qt.green或qt.red 3。之后,小部件应该“重新绘制”或使用当前正确的颜色:)不要忘记将计时器移到外部
paintEvent
。您将每隔2秒创建一个新计时器,否则再次:)谢谢您的帮助。它就像我需要的一样工作。
class CircleWidget(QWidget):
    def __init__(self, parent = None, color = 'green'):
        super().__init__()
        self.setFixedSize(150, 150)
        if color == 'red':
            self.qt_color = Qt.red
        elif color == 'green':
            self.qt_color = Qt.green

        self.timer = QTimer(self)
        self.timer.timeout.connect(self.change_color)
        self.timer.start(2*1000) # Only one timer is needed

    def paintEvent(self, event = None):
        qp = QPainter(self)
        qp.setPen(QPen(self.qt_color, 8, Qt.SolidLine))
        qp.setBrush(QBrush(self.qt_color, Qt.SolidPattern))
        qp.drawEllipse(40, 40, 100, 100)


    def change_color(self):
        if self.qt_color == Qt.red:
            self.qt_color = Qt.green
        else:
            self.qt_color = Qt.red
        self.update() # Will call paintEvent
    self.color = color
    if self.color == 'red':
        self.qt_color = Qt.red
    elif self.color == 'green':
        self.qt_color = Qt.green

def change_color(self):
    if self.color == 'red':
        self.qt_color = Qt.red
    elif self.color == 'green':
        self.qt_color = Qt.green
    self.update() # Will call paintEvent