Зависает и закрывается приложение при добавлении функции update()
При добавлении функции self.update() зависает и почти сразу же закрывается приложение.
Эта функция нужна для перерисовки места положения квадратов в будущем
from typing import Sized
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QRadialGradient, QPainter, QPainterPath, QPen, QBrush, QGradient, QColor
from PyQt5.QtCore import QPointF, Qt, QRect
import sys
import time
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.resize(600, 400)
def paintEvent(self, event):
self.painter = QPainter(self)
radialGrad = QRadialGradient(QPointF(300, 450), 200)
radialGrad.setColorAt(0, QColor('#1B2735'))
radialGrad.setColorAt(1, QColor('#090A0F'))
self.painter.setBrush(radialGrad)
self.painter.drawRect(0, 0, 600, 400)
self.painter.setBrush(QBrush(Qt.white))
self.painter.drawRect(100, 390, 2, 2)
self.painter.drawRect(200, 390, 3, 3)
self.painter.drawRect(300, 390, 4, 4)
self.update()
time.sleep(1)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Замкните все self.painter на painter
Нельзя использовать time.sleep(1) - это блокирует интерфейс.
Нельзя использовать self.update() в методе paintEvent().
update() используется вне этого метода и для того чтобы вызвать этот метод paintEvent().
import sys
from typing import Sized
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QRadialGradient, QPainter, QPainterPath, QPen, QBrush, QGradient, QColor
from PyQt5.QtCore import QPointF, Qt, QRect
#import time
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.resize(600, 400)
def paintEvent(self, event):
# self.painter = QPainter(self)
painter = QPainter(self)
radialGrad = QRadialGradient(QPointF(300, 450), 200)
radialGrad.setColorAt(0, QColor('#1B2735'))
radialGrad.setColorAt(1, QColor('#090A0F'))
painter.setBrush(radialGrad)
painter.drawRect(0, 0, 600, 400)
painter.setBrush(QBrush(Qt.white))
painter.drawRect(100, 390, 2, 2)
painter.drawRect(200, 390, 3, 3)
painter.drawRect(300, 390, 4, 4)
# self.update()
# time.sleep(1)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
