Python PyQt5:在Qmovie中重新加载gif
如何在PyQt5中重新加载新的动画gif文件 我想做的是:Python PyQt5:在Qmovie中重新加载gif,python,python-3.x,qt5,pyqt5,Python,Python 3.x,Qt5,Pyqt5,如何在PyQt5中重新加载新的动画gif文件 我想做的是: 加载测试.gif play test.gif 用另一个任意动画gif覆盖原始test.gif文件 单击按钮时,让Qmovie重新加载gif 显示新的gif 以下是我为尝试此操作而设置的基本代码,但是单击按钮刷新不起作用: import sys from PyQt5.QtCore import Qt, QByteArray, QSettings, QTimer, pyqtSlot from PyQt5.QtWidgets import Q
import sys
from PyQt5.QtCore import Qt, QByteArray, QSettings, QTimer, pyqtSlot
from PyQt5.QtWidgets import QWidget, QApplication, QLabel, QSizePolicy, QVBoxLayout, QAction, QPushButton
from PyQt5.QtGui import QMovie
class GifPlayer(QWidget):
def __init__(self, title, parent=None):
QWidget.__init__(self, parent)
self.movie = QMovie("test.gif", QByteArray(), self)
size = self.movie.scaledSize()
self.setGeometry(200, 200, size.width(), size.height())
self.setWindowTitle(title)
self.movie_screen = QLabel()
self.movie_screen.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.movie_screen.setAlignment(Qt.AlignCenter)
main_layout = QVBoxLayout()
main_layout.addWidget(self.movie_screen)
self.setLayout(main_layout)
self.movie.setCacheMode(QMovie.CacheAll)
self.movie_screen.setMovie(self.movie)
self.movie.start()
self.movie.loopCount()
button = QPushButton('refresh gif', self)
button.setToolTip('This is an example button')
button.move(10,10)
button.clicked.connect(self.on_click)
@pyqtSlot()
def on_click(self):
self.movie_screen.setMovie(self.movie)
print("done")
if __name__ == "__main__":
app = QApplication(sys.argv)
player = GifPlayer("update this gif")
player.show()
sys.exit(app.exec_())
事实证明,这是一个基本上很容易解决的问题。错误是试图刷新电影屏幕,而不是电影本身。只需重新设置QMovie文件,让电影屏幕重新显示它,然后启动电影。以下是更正后的代码:
gifFile = "test.gif"
class GifPlayer(QWidget):
def __init__(self, title, gifFile, parent=None):
QWidget.__init__(self, parent)
self.movie = QMovie(gifFile, QByteArray(), self)
size = self.movie.scaledSize()
self.setGeometry(200, 200, size.width(), size.height())
self.setWindowTitle(title)
self.movie_screen = QLabel()
self.movie_screen.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
self.movie_screen.setAlignment(Qt.AlignCenter)
main_layout = QVBoxLayout()
main_layout.addWidget(self.movie_screen)
self.setLayout(main_layout)
self.movie.setCacheMode(QMovie.CacheAll)
self.movie_screen.setMovie(self.movie)
self.movie.start()
self.movie.loopCount()
button = QPushButton('refresh gif', self)
button.setToolTip('This is an example button')
button.move(10,10)
button.clicked.connect(self.on_click)
@pyqtSlot()
def on_click(self):
self.movie = QMovie(gifFile,QByteArray(), self)
self.movie_screen.setMovie(self.movie)
self.movie.start()
print("done")
if __name__ == "__main__":
app = QApplication(sys.argv)
player = GifPlayer("update this gif", gifFile)
player.show()
sys.exit(app.exec_())
点击方式主要是需要改变的 你必须创作另一部电影,然后调用start()我将每5分钟更新一次,我是否必须每5分钟再创作一部电影?是的,你为什么要寻找另一种神奇的方式?