Надо создать постоянную анимацию исчезновения и появления виджета. То есть простым языком виджет self.wid постепенно исчезает и также постепенно появляется.
Есть такой код в качестве примера:
import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtCore import QRect, Qt
from PyQt5.QtWidgets import QMainWindow
class Test(QMainWindow):
def __init__(self):
super(Test, self).__init__()
self.setStyleSheet('background:blue;')
self.resize(200, 200)
self.wid = QtWidgets.QWidget(self)
self.wid.setStyleSheet('background:red;')
self.wid.setGeometry(QRect(0, 0, 100, 100))
self.group = QtCore.QSequentialAnimationGroup(self)
self.group.setLoopCount(-1)
self.ani_1 = QtCore.QPropertyAnimation(self.wid, b"windowOpacity") # Исчезновение
self.ani_1.setDuration(1500)
self.ani_1.setStartValue(1.0)
self.ani_1.setEndValue(0)
self.ani_2 = QtCore.QPropertyAnimation(self.wid, b"windowOpacity") # Появление
self.ani_2.setDuration(1500)
self.ani_2.setStartValue(0)
self.ani_2.setEndValue(1.0)
self.group.addAnimation(self.ani_1)
self.group.addAnimation(self.ani_2)
self.start_fun()
def start_fun(self):
self.group.start()
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = Test()
w.show()
sys.exit(app.exec_())
В этом варианте ничего не происходит, self.wid просто не реагирует на анимацию, но если в строке определения анимации self.ani_1 = QtCore.QPropertyAnimation(self.wid, b"windowOpacity"), прописать вместо self.wid -> self, то анимация будет распространятся на все окно, а не только на красный квадрат, как сделать так, чтоб только красный квадрат исчезал?