为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 QPropertyAnimation 动画不起作用?

为什么 QPropertyAnimation 动画不起作用?

慕婉清6462132 2021-10-05 16:58:56
我试图在按下按钮时生成动画,但在self.frame2返回到大小 0后它不起作用:这是一个例子:帧返回 0 后,动画不会再次完成:from PyQt5.QtWidgets import QMainWindow,QApplicationfrom PyQt5 import QtCorefrom PyQt5 import uicclass 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_()
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超12个赞

几何是小部件相对于父级的位置,在初始情况下,几何是 (480, 0, 0, 443),也就是说,它的宽度为 0 但它位于 frame1 的右边缘及其之后设置为几何体 (0 , 0, 0, 0) 您将其移动到窗口的左上角位置并在那里应用动画,但您看不到它为什么在 frame1 后面。


为了更好地观察错误,请使用 raise_ 以便框架位于所有错误之上。


def animaAjustes(self):

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

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

    else:

        self.frame2.raise_() # <--- this change will make the error visible

        self.animation.start()

解决办法只是改变大小,而不是几何体(几何体是位置+大小):


def animaAjustes(self):

    if self.frame2.width() > 0:

        self.frame2.resize(0, 0)

    else:

        self.animation.start()


查看完整回答
反对 回复 2021-10-05
  • 2 回答
  • 0 关注
  • 403 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信