読者です 読者をやめる 読者になる 読者になる

アヤチノオト

覚書のこと

PySideでメインウィンドウをアニメーションしながらリサイズ

タイトルのとおりです。
ボタンを押すとスライドバーで指定したサイズにメインウィンドウをリサイズします。
アニメーションしながらね。
確認してませんがimport文を変えればPyQtでも動くと思います。

import sys
from PySide import QtGui, QtCore
from PySide.QtCore import QPropertyAnimation, QRect


class AnimationExample(QtGui.QMainWindow):
    def __init__(self):
        super(AnimationExample, self).__init__()
        self.animation = QPropertyAnimation(self, "geometry")
        # アニメーションする時間の長さ(ミリ秒
        self.animation.setDuration(400)
        # アニメーションの種類
        self.animation.setEasingCurve(QtCore.QEasingCurve.InOutQuint)
        self.initUI()

    def initUI(self):
        btn1 = QtGui.QPushButton("Resize", self)
        btn1.move(0, 40)

        slide = QtGui.QSlider(QtCore.Qt.Horizontal, self)
        slide.setMinimum(200)  # てきとう
        slide.setMaximum(600)  # てきとう

        btn1.clicked.connect(self.changeWindowSize(slide))

        self.setGeometry(300, 300, 290, 150)
        self.setWindowTitle("Animation example")
        self.show()

    def changeWindowSize(self, slide):
        """ 位置は今のままで大きさだけ変える """
        def _changeWindowSize():
            x = self.geometry().x()
            y = self.geometry().y()
            height = slide.value()
            width = height
            self.animation.setEndValue(QRect(x, y, width, height))
            self.animation.start()
        return _changeWindowSize


def main():
    app = QtGui.QApplication(sys.argv)
    AnimationExample()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()