2016-07-27 7 views
1

QMainWindowをアニメーション化する際に問題が発生しました。サイドパネルの「スライド」アニメーションを作成しようとしています。 "app.exec"の前に呼び出すとうまく動作しますが、 "animate_out"関数を呼び出すと何もしないようです。何か案は?メインウィンドウでQProcessAnimationを使用

PS:私が探しているものの例を見るために、コードを下に向かってコメント解除できます。

おかげ

# PYQT IMPORTS 
from PyQt4 import QtCore, QtGui 
import sys 
import UI_HUB 


# MAIN HUB CLASS 
class HUB(QtGui.QMainWindow, UI_HUB.Ui_HUB): 

    def __init__(self): 
     super(self.__class__, self).__init__() 
     self.setupUi(self) 
     self.setCentralWidget(self._Widget) 
     self.setWindowTitle('HUB - 0.0') 
     self._Widget.installEventFilter(self) 
     self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint) 
     self.set_size() 

     self.animate_out() 

    def set_size(self): 
     # Finds available and total screen resolution 
     resolution_availabe = QtGui.QDesktopWidget().availableGeometry() 
     ava_height = resolution_availabe.height() 
     self.resize(380, ava_height) 

    def animate_out(self): 
     animation = QtCore.QPropertyAnimation(self, "pos") 
     animation.setDuration(400) 
     animation.setStartValue(QtCore.QPoint(1920, 22)) 
     animation.setEndValue(QtCore.QPoint(1541, 22)) 
     animation.setEasingCurve(QtCore.QEasingCurve.OutCubic) 
     animation.start() 


if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv) 
    form = HUB() 
    form.show() 
    form.raise_() 
    form.activateWindow() 

    # Doing the animation here works just fine 
    # animation = QtCore.QPropertyAnimation(form, "pos") 
    # animation.setDuration(400) 
    # animation.setStartValue(QtCore.QPoint(1920, 22)) 
    # animation.setEndValue(QtCore.QPoint(1541, 22)) 
    # animation.setEasingCurve(QtCore.QEasingCurve.OutCubic) 
    # animation.start() 

    app.exec_() 
+0

あなたの関数で 'animation.start()'を呼び出すことを忘れましたか? – Mailerdaimon

+0

HI @Mailerdaimon、応答に感謝します。はい、この例では "animation.start()"という行を広告に忘れていました。しかし、それを私のスクリプトに追加することは何の違いもないようです。 – DevilWarrior

+0

コンストラクタの後にアニメーションを開始してください。私はそれが "showEvent"で動作するかどうかは分かりませんが、試してみることができます。 – Mailerdaimon

答えて

1

問題はanimationオブジェクトがanimate_outアウト機能の範囲よりも長生きしないことです。 これを解決するには、HUBクラスにanimationオブジェクトをメンバーとして追加する必要があります。

私のサンプルコードでは、アニメーションの作成と再生を別の機能に分割しました。

# [...] skipped 
class HUB(QtGui.QMainWindow, UI_HUB.Ui_HUB): 

    def __init__(self): 
     # [...] skipped 
     self.create_animations() # see code below 
     self.animate_out() 

    def set_size(self): 
     # [...] skipped 

    def create_animations(self): 
     # set up the animation object 
     self.animation = QtCore.QPropertyAnimation(self, "pos") 
     self.animation.setDuration(400) 
     self.animation.setStartValue(QtCore.QPoint(1920, 22)) 
     self.animation.setEndValue(QtCore.QPoint(1541, 22)) 
     self.animation.setEasingCurve(QtCore.QEasingCurve.OutCubic) 

    def animate_out(self) 
     # use the animation object 
     self.animation.start() 
# [...] skipped 
関連する問題