QMovie.supportedFormats()返回空列表

时间:2014-10-09 15:08:24

标签: python qt pyqt4 pyside

我正在开发一款使用动画GIF的应用,由QMovie阅读并放置在QLabel中。当我开始在不同的环境中尝试应用程序时,即PySidePyQt4在不同的计算机(Win7,OpenSuse)上的组合时,我注意到有时候gif会工作,而有时候却没有。它似乎与我正在使用的qt包装器无关。

我唯一注意到的是它什么时候起作用:

  1. QMovie.isValid()返回True
  2. QMovie.supportedFormats()返回[PyQt4.QtCore.QByteArray('gif'), PyQt4.QtCore.QByteArray('mng')]
  3. 与不起作用相反:

    1. QMovie.isValid()返回False
    2. QMovie.supportedFormats()返回[]
    3. 任何想法?


      更新:1
      这个问题似乎与Windows和Linux上的Anaconda安装程序一致。无论是PySide还是PyQt4都没关系。我确实发现了这个问题:https://github.com/ContinuumIO/anaconda-issues/issues/66



      示例代码

      import sys
      import os
      from PyQt4 import QtGui, QtCore
      
      class BusyLabel(QtGui.QWidget):
          def __init__(self, gif, parent = None, text = None):
              QtGui.QWidget.__init__(self, parent)
      
              self.hlayout = QtGui.QHBoxLayout(self)
              self.hlayout.setSpacing(0)
              self.hlayout.setContentsMargins(0, 0, 0, 0)
              self.setLayout(self.hlayout)
      
              # Movie
              self.movieLabel = QtGui.QLabel(self)
              self.movieLabel.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
              self.movieLabel.setAlignment(QtCore.Qt.AlignCenter)
      
      
              self.movie = QtGui.QMovie(gif, QtCore.QByteArray(), self)
              self.movie.setScaledSize(QtCore.QSize(20,20))
              self.movie.setCacheMode(QtGui.QMovie.CacheAll)
              self.movie.setSpeed(100)
              print self.movie.isValid()
              print self.movie.supportedFormats()
      
              self.movieLabel.setMovie(self.movie)
              self.hlayout.addWidget(self.movieLabel)
      
      
              # Label
              self.label = QtGui.QLabel(text)
              self.hlayout.addWidget(self.label)
      
              self.movie.start()
      
          def setText(self, text):
              self.label.setText(text)
      
          def start(self):
              self.show()
              self.movie.start()
      
          def stop(self):
              self.hide()
              self.movie.stop()
      
      if __name__ == "__main__":
          gif = os.path.abspath("load.gif")
          print os.path.exists(gif)
          app = QtGui.QApplication(sys.argv)
          player = BusyLabel(gif)
          player.setText('Loading...')
          player.start()
          player.show()
          sys.exit(app.exec_())
      

      此处生成的gif:http://www.ajaxload.info/

0 个答案:

没有答案