当前位置:  开发笔记 > 编程语言 > 正文

QtGui.QMovie gif在函数执行时停止

如何解决《QtGui.QMoviegif在函数执行时停止》经验,为你挑选了1个好方法。

我希望在函数完成之前显示一个加载gif.

我的代码是

 self.LoadingGif = QtGui.QLabel(MainWindow)
 movie = QtGui.QMovie("hashUpdate.gif")
 self.LoadingGif.setMovie(movie)
 self.LoadingGif.setAlignment(QtCore.Qt.AlignCenter)
 self.gridLayout_2.addWidget(self.LoadingGif, 4, 1, 1, 1)
 movie.start()
 self.MYFUNCTION()

问题是gif显示但它没有播放.它仅在功能完成时才开始播放.
如何在执行功能时进行gif播放?



1> three_pineap..:

GIF停止播放,因为您的功能self.MYFUNCTION阻止了Qt事件循环.事件循环是Qt的一部分,其中(除其他外)处理鼠标/键盘事件,处理小部件的重绘(当您将鼠标悬停在按钮上或点击它们时按钮)以及更新播放动画时显示的当前帧.

因此,Qt事件循环负责执行代码以响应程序中发生的各种事情,但在执行代码时,它不能执行任何其他操作.

所以你需要改变你的代码.有几种解决方案:

MYFUNCTION在辅助线程中运行,因此它不会阻止Qt事件循环.但是,如果您的函数以任何方式与Qt GUI交互,则不能选择此选项.如果你调用任何Qt GUI方法MYFUNCTION(比如更新标签或其他),这绝不能从辅助线程完成(如果你尝试,你的程序将随机崩溃).建议使用QThread带有Qt而不是Python线程,但如果您不需要从函数回传到主线程,Python线程将正常工作.

如果MYFUNCTION由于你有一个for/ whileloop 运行了很长时间,你可以考虑使用a QTimer来定期调用循环中的代码.控制在QTimer执行后返回到Qt事件循环,因此它可以在循环的迭代之间处理其他事情(如更新动画).

QApplication.instance().processEvents()在您的功能期间定期打电话.这也会将控制权返回给Qt事件循环,但如果您的函数也使用Qt执行操作,则可能会出现意外行为.

推荐阅读
手机用户2502851955
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有