Анимированный задний фон окна
Делаю анимированный задний фон и столкнулся с двумя проблемами:
- При отрисовки квадратов у них автоматически рисуется бордюр. Как убрать его?
- Отрисовка производится один раз в функции
paintEvent. Как эту функцию зациклить, чтобы она вызывалась для перерисовки заднего фона и при этом не вешала форму.
Мне представляется в отдельном потоке ее на бесконечный цикл поставить, но может есть другие варианты
Пример:
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
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):
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)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Обратите внимание на self.rect(). self.height() и setPen()
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
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):
painter = QPainter(self)
'''
radialGrad = QRadialGradient(QPointF(300, 450), 200)
radialGrad.setColorAt(0, QColor('#1B2735'))
radialGrad.setColorAt(1, QColor('#090A0F'))
painter.setBrush(radialGrad)
'''
radialGrad = QRadialGradient(0.3, 0.7, 0.05)
radialGrad.setCoordinateMode(QGradient.ObjectBoundingMode)
radialGrad.setSpread(QGradient.ReflectSpread)
radialGrad.setColorAt(0, QColor('#0250c5'))
radialGrad.setColorAt(1, QColor('#2575fc'))
painter.setBrush(radialGrad)
# painter.drawRect(0, 0, 600, 400)
painter.drawRect(self.rect()) # +++ rect
painter.setBrush(QBrush(Qt.white)) # white red
painter.setPen(QtGui.QPen(QtCore.Qt.red, -1)) # +++
painter.drawRect(100, self.height()-12, 2, 2) # +++ height
painter.drawRect(200, self.height()-12, 3, 3) # +++ height
painter.drawRect(300, self.height()-12, 4, 4) # +++ height
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
