PyQt4 - 无法使用 QMovie 或 Phonon 将视频传输到 运行
PyQt4 - can't get video to run with QMovie or Phonon
我在让任何视频播放器与我的 PyQt4 设置一起工作时遇到问题(已经尝试过声子和 QMovie)。下面的 QMovie 脚本来自一个示例,其中几个用户评论它是功能性的。对我来说,它运行但只打开一个 window (以 Loading...
居中),它从未实际播放 .gif (我已经尝试了来自许多在线示例的几个工作 .gif 文件,所以该文件不是问题)。我也注释掉了 运行 三个调试步骤的结果。
接下来我能做什么?
import sys
import os
import sip
sip.setapi('QVariant', 2)
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() #output = False
print self.movie.supportedFormats() #output = []
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 = 'test1.gif'
print os.path.exists(gif) #output = True
app = QtGui.QApplication(sys.argv)
player = BusyLabel(gif)
player.setText('Loading...')
player.start()
player.show()
sys.exit(app.exec_())
output:
True
False
[]
(对于那些对我的其他尝试感到好奇的人,运行 一个流行的 Phonon 脚本给出了错误:phonon backend plugin could not be loaded
...此时我会接受任何东西)
我在这里提供了我为回答这个(我的)问题而编写的完整、有效的代码。您只需要 PyQt4
和 Matplotlib
,我希望这可以帮助其他遇到类似问题的人:
我在让任何视频播放器与我的 PyQt4 设置一起工作时遇到问题(已经尝试过声子和 QMovie)。下面的 QMovie 脚本来自一个示例,其中几个用户评论它是功能性的。对我来说,它运行但只打开一个 window (以 Loading...
居中),它从未实际播放 .gif (我已经尝试了来自许多在线示例的几个工作 .gif 文件,所以该文件不是问题)。我也注释掉了 运行 三个调试步骤的结果。
接下来我能做什么?
import sys
import os
import sip
sip.setapi('QVariant', 2)
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() #output = False
print self.movie.supportedFormats() #output = []
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 = 'test1.gif'
print os.path.exists(gif) #output = True
app = QtGui.QApplication(sys.argv)
player = BusyLabel(gif)
player.setText('Loading...')
player.start()
player.show()
sys.exit(app.exec_())
output:
True
False
[]
(对于那些对我的其他尝试感到好奇的人,运行 一个流行的 Phonon 脚本给出了错误:phonon backend plugin could not be loaded
...此时我会接受任何东西)
我在这里提供了我为回答这个(我的)问题而编写的完整、有效的代码。您只需要 PyQt4
和 Matplotlib
,我希望这可以帮助其他遇到类似问题的人: