Qt 第二次设置QMovie文件名无效

Qt 第二次设置QMovie文件名无效,qt,pyqt,Qt,Pyqt,我将初始电影文件设置为: self.movie = QMovie("dotGreenBlack.gif", QByteArray(), self) 在运行时,我想通过设置: self.movie.setFileName("dotGreyStatic.gif") 但这会导致原始设置文件“dotGreenBlack.gif”的帧冻结 我还需要做什么才能在运行时更改Gif动画 以下是完整代码: from PyQt4 import QtCore, QtGui from PyQt4.QtGui imp

我将初始电影文件设置为:

self.movie = QMovie("dotGreenBlack.gif", QByteArray(), self)
在运行时,我想通过设置:

self.movie.setFileName("dotGreyStatic.gif")
但这会导致原始设置文件“dotGreenBlack.gif”的帧冻结

我还需要做什么才能在运行时更改Gif动画

以下是完整代码:

from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import *
from PyQt4.QtCore import *

import sys




class ImagePlayer(QWidget):
    def __init__(self, filename, title, parent=None):
        QWidget.__init__(self, parent)

        # Load the file into a QMovie
        self.movie = QMovie(filename, QByteArray(), self)

        size = self.movie.scaledSize()
        self.setGeometry(200, 200, size.width(), size.height())
        self.setWindowTitle(title)

        self.movie_screen = QLabel()
        # Make label fit the gif
        self.movie_screen.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.movie_screen.setAlignment(Qt.AlignCenter)

        # Create the layout
        main_layout = QVBoxLayout()
        main_layout.addWidget(self.movie_screen)



        self.setLayout(main_layout)

        # Add the QMovie object to the label
        self.movie.setCacheMode(QMovie.CacheAll)
        self.movie.setSpeed(100)
        self.movie_screen.setMovie(self.movie)
        self.movie.start()
        self.movie.loopCount()

        self.movie.setFileName("dotGreyStatic.gif")
        self.movie_screen.setMovie(self.movie)



if __name__ == "__main__":
    gif = "dotGreenBlack.gif"
    app = QApplication(sys.argv)
    app.setStyleSheet("QWidget { background-color: black }")
    player = ImagePlayer(gif, "was")
    player.show()
    sys.exit(app.exec_())
本例中使用的Gif图标:

from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import *
from PyQt4.QtCore import *

import sys




class ImagePlayer(QWidget):
    def __init__(self, filename, title, parent=None):
        QWidget.__init__(self, parent)

        # Load the file into a QMovie
        self.movie = QMovie(filename, QByteArray(), self)

        size = self.movie.scaledSize()
        self.setGeometry(200, 200, size.width(), size.height())
        self.setWindowTitle(title)

        self.movie_screen = QLabel()
        # Make label fit the gif
        self.movie_screen.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
        self.movie_screen.setAlignment(Qt.AlignCenter)

        # Create the layout
        main_layout = QVBoxLayout()
        main_layout.addWidget(self.movie_screen)



        self.setLayout(main_layout)

        # Add the QMovie object to the label
        self.movie.setCacheMode(QMovie.CacheAll)
        self.movie.setSpeed(100)
        self.movie_screen.setMovie(self.movie)
        self.movie.start()
        self.movie.loopCount()

        self.movie.setFileName("dotGreyStatic.gif")
        self.movie_screen.setMovie(self.movie)



if __name__ == "__main__":
    gif = "dotGreenBlack.gif"
    app = QApplication(sys.argv)
    app.setStyleSheet("QWidget { background-color: black }")
    player = ImagePlayer(gif, "was")
    player.show()
    sys.exit(app.exec_())

您只需停止并重新启动电影:

    self.movie.stop()
    self.movie.setFileName("dotGreyStatic.gif")
    self.movie.start()

谢谢你,这对我有用。停止-开始是新分配的电影播放器吗?@user1767754。不,我认为这只是重复使用现有的一个。