Python 在paintevent中动态更改PyQt5中的QWidget
嘿,伙计们。 我有一个和上面一样的代码,我希望它也能更新Gui,但我不知道如何更新。self.qt_颜色一直在完美更新,但我不知道如何让它每隔2秒左右用正确的颜色再次绘制QWidgetPython 在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
有什么帮助吗?当您更改
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