猿问

为什么 QPropertyAnimation 动画不起作用?

我试图在按下按钮时生成动画,但在self.frame2返回到大小 0后它不起作用:

这是一个例子:

帧返回 0 后,动画不会再次完成:


from PyQt5.QtWidgets import QMainWindow,QApplication

from PyQt5 import QtCore

from PyQt5 import uic



class Login(QMainWindow):

    def __init__(self):

        QMainWindow.__init__(self)

        uic.loadUi("1.-Login.ui",self)


        #Apariencia de Ventana

        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

        self.setAttribute(QtCore.Qt.WA_NoSystemBackground,True)

        self.setAttribute(QtCore.Qt.WA_TranslucentBackground, True)


        #Botones

        self.Ajustes.clicked.connect(self.animaAjustes)



        self.ComboSuc.lineEdit().setAlignment(QtCore.Qt.AlignCenter)




        self.animation = QtCore.QPropertyAnimation(self.frame2, b'size', self)

        self.animation.setStartValue(QtCore.QSize(0,0))

        self.animation.setEndValue(QtCore.QSize(145,443))

        self.animation.setDuration(200)

        self.animation.setDirection(QtCore.QAbstractAnimation.Forward)





    def animaAjustes(self):


        if self.frame2.width()!=0:

            self.frame2.setGeometry(0,0,0,0)


        else:


            self.animation.start()




app = QApplication([])

l = Login()

l.show()

app.exec_()


慕婉清6462132
浏览 531回答 2
2回答

萧十郎

几何是小部件相对于父级的位置,在初始情况下,几何是 (480, 0, 0, 443),也就是说,它的宽度为 0 但它位于 frame1 的右边缘及其之后设置为几何体 (0 , 0, 0, 0) 您将其移动到窗口的左上角位置并在那里应用动画,但您看不到它为什么在 frame1 后面。为了更好地观察错误,请使用 raise_ 以便框架位于所有错误之上。def animaAjustes(self):&nbsp; &nbsp; if self.frame2.width() != 0:&nbsp; &nbsp; &nbsp; &nbsp; self.frame2.setGeometry(0, 0, 0, 0)&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; self.frame2.raise_() # <--- this change will make the error visible&nbsp; &nbsp; &nbsp; &nbsp; self.animation.start()解决办法只是改变大小,而不是几何体(几何体是位置+大小):def animaAjustes(self):&nbsp; &nbsp; if self.frame2.width() > 0:&nbsp; &nbsp; &nbsp; &nbsp; self.frame2.resize(0, 0)&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; self.animation.start()
随时随地看视频慕课网APP

相关分类

Python
我要回答