2014-01-12 6 views
1

저는이 포럼과 파이썬 및 PyQt에 초보자입니다. Qt를 사용하여 애니메이션을 배우려고 시도한 몇 가지 기본 사항을 살펴본 후 푸시 버튼이 화면 왼쪽에서 다른 버튼을 클릭 할 때 특정 위치로 움직이는 간단한 응용 프로그램을 작성하길 원했습니다.푸시 버튼이 Qt4에서 애니메이션되지 않습니다.

class AppMainUI(QtGui.QMainWindow, Ui_MainWindow): 

    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 

     self.setupUi(self) 

    self.setWindowFlags(QtCore.Qt.Window|QtCore.Qt.FramelessWindowHint) 
    self.connect(self.pushButton_4, QtCore.SIGNAL("clicked()"), self.onExitClicked) 
    self.connect(self.pushButton_5, QtCore.SIGNAL("clicked()"), self.animateButtons) 

    def animateButtons(self): 
     animation = QtCore.QPropertyAnimation(self.pushButton, "geometry") 
     animation.setDuration(2) 
     animation.setStartValue(QtCore.QRect(0, 0, self.pushButton.width(), self.pushButton.height())) 
     animation.setEndValue(QtCore.QRect(760, 280, self.pushButton.width(), self.pushButton.height())) 
     animation.setEasingCurve(QtCore.QEasingCurve.OutElastic) 
     animation.start() 

    def onExitClicked(self): 
     sys.exit(0) 

App = QtGui.QApplication(sys.argv) 
UI = AppMainUI() 
UI.show() 
App.exec_() 

은 내가 볼하는 위치에있는 버튼 이동 (0, 0) 실제로 애니메이션의 내 시작 위치 인 것입니다 :이 과정에서, 나는 다음과 같은 코드를 작성 끝났다. 내가 여기서 뭔가 잘못하고있는거야?

답변

2

문제는 으로 인한 것입니다. 가비지 컬렉터; 메서드 animateButtons(self)animation.start() 문으로 끝나면 animation 개체는 가비지 수집 자에 의해 소멸되므로 애니메이션이 수행되지 않습니다. 그렇지 않으면 당신이하지 않을 것이라는 점을 너무 빨리 실행됩니다, 그 애니메이션이 표시 될 수 있도록

self.animation = QtCore.QPropertyAnimation(...) 
self.animation.setStartValue(...) 
... 

는 또한, 적어도 1000 MS에 시간을 증가 :

그냥 개체 이름의 시작 self 추가 그것을 볼 수 있습니다.

+0

안녕하세요 고마워요 ... 효과가있었습니다. 도와 줘서 고마워! – Aby

관련 문제