PyQt4 - не удается запустить видео с помощью QMovie или Phonon

У меня проблемы с тем, чтобы любой видеоплеер работал с моей настройкой PyQt4 (попробовал и phonon, и QMovie). Приведенный ниже сценарий QMovie взят из примера, где несколько пользователей прокомментировали его как функциональный. Для меня он запускается, но открывает только окно (с 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... Я возьму что-нибудь на этом этапе)


person ees    schedule 04.04.2018    source источник
comment
какая у тебя ОС?   -  person eyllanesc    schedule 05.04.2018
comment
@eyllanesc Я работаю на macOS High Sierra, v10.13.3   -  person ees    schedule 05.04.2018
comment
@eyllanesc есть идеи, учитывая мою настройку?   -  person ees    schedule 10.04.2018
comment
Я подозреваю, что проблема в том, что у вас не установлен бэкенд: doc.qt.io/archives/qt-4.8/phonon-overview.html#backends: QuickTime на Mac   -  person eyllanesc    schedule 10.04.2018
comment
@eyllanesc спасибо - я ищу, как это сделать на macOS, но для этой темы это джунгли онлайн-форумов с множеством неудачных попыток. Я продолжу сегодня, но даже подумал о создании собственного класса видеоплеера с нуля.   -  person ees    schedule 12.04.2018


Ответы (1)


Я предоставляю здесь полный рабочий код, который я написал, чтобы решить эту (мою) проблему. Все, что вам нужно, это PyQt4 и Matplotlib, я надеюсь, что это может помочь кому-то еще, столкнувшемуся с подобными проблемами в будущем:

https://github.com/evanseitz/PyQt4_VideoPlayer

person ees    schedule 11.03.2019