缩放时QMovie内容的缩放不起作用

时间:2016-04-18 19:46:46

标签: qt animation resize pyqt scale

我正在考虑在我的应用程序中使用QMovie来制作一些动画图标。下面的代码演示了这个类的一些基本用法,我想将它作为功能添加到我的应用程序中。我面临的问题是,只要QMovie暂停,缩放内容似乎不起作用(请参阅代码后的屏幕截图)。以两种方式观察行为 - 升级(由窗口大小增加引起)和缩小(由窗口大小减小引起)。

知道如何解决这个问题吗?

from sys import exit, argv
from PyQt4.QtGui import QApplication, QWidget, QCheckBox, QPushButton, QLabel, QGridLayout, QIcon, QSizePolicy, QMovie
from PyQt4.QtCore import Qt, QSize, pyqtSlot, pyqtSignal, QPoint, QRect

class Example(QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.toggled = False
        self.initUI()

    def initUI(self):

        self.layout = QGridLayout()
        self.label = QLabel()
        self.label.setMinimumWidth(100)
        self.label.setMinimumHeight(100)
        self.label.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
        self.label_animation = QMovie('circles.gif')
        self.label_animation.setScaledSize(QSize(100, 100))
        self.label.setMovie(self.label_animation)
        self.label_animation.start()
        self.label_animation.setPaused(True)
#        self.label.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.layout.addWidget(self.label, 0, 0)

        self.button = QPushButton()
        self.button.setObjectName('button')
#        self.button.setIcon(QIcon('icon.png'))
        self.button.setStyleSheet('QPushButton#button{border-top-right-radius: 10px; border-bottom-right-radius: 10px; border-top-left-radius: 10px; border-bottom-left-radius: 10px; border-image: url("icon.png"); background: transparent;}')
        self.button.setMinimumWidth(100)
        self.button.setMinimumHeight(100)
        self.button.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
        self.button.clicked.connect(self.toggle)
        self.layout.addWidget(self.button, 0, 1)

        self.setGeometry(200, 200, 400, 400)
        self.setWindowTitle('Icons, Images && Video with PyQt')
        self.setLayout(self.layout)
        self.resize(self.layout.sizeHint())

    def resizeEvent(self, event):
      self.label_animation.setScaledSize(QSize(self.label.width(), self.label.height()))

    @pyqtSlot()
    def toggle(self):
      style = 'QPushButton#button{border-top-right-radius: 10px; border-bottom-right-radius: 10px; border-top-left-radius: 10px; border-bottom-left-radius: 10px; border-image: url("icon.png"); '
      if not self.toggled:
        style = style + 'background-color: rgb(255, 0, 0);}'
      else:
        style = style + 'background: transparent;}'

      self.button.setStyleSheet(style)
      self.label_animation.setPaused(self.toggled)
      self.toggled = not self.toggled

def main():

    app = QApplication(argv)
    ex = Example()
    ex.show()
    exit(app.exec_())


if __name__ == '__main__':
    main()

截图:

右侧调整窗口(已暂停QMovie - QPushButton及其边框图像已正确调整大小,但左侧是QMovie的内容QLabel(标签本身已调整大小!)。下面的屏幕截图显示无法升级动画。

enter image description here

调整窗口大小(取消暂停QMovie - 动画取消暂停时,QMovie的内容会正确缩放。

enter image description here

0 个答案:

没有答案