Animierte .GIF PyQt4

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
HelleR
User
Beiträge: 2
Registriert: Freitag 4. Juli 2014, 16:41

Guten Abend;

Ich habe folgenden Code:

Code: Alles auswählen

class wndWelcome(BaseWindow.BaseWindow):
    def __init__(self):
        BaseWindow.BaseWindow.__init__(self,"wndWelcome", "UI/wndWelcome.ui")

        # Button mit dem Click Event Verlinken
        self.connect(self.ui.btnExitWelcomeScreen, QtCore.SIGNAL("clicked()"), self.btnExitWelcomeScreen_Click)
        self.connect(self.ui.btnCheckTransaction, QtCore.SIGNAL("clicked()"), self.btnCheckTransaction)
        self.connect(self.ui.btnClose, QtCore.SIGNAL("clicked()"), self.btnClose_Click)
        self.movieScreen = QtGui.QLabel()
        self.movieScreen.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) 
        self.movieScreen.setAlignment(QtCore.Qt.AlignCenter) 
        self.movie = QtGui.QMovie("geldschein.gif", QtCore.QByteArray(), self) 
        self.movie.setCacheMode(QtGui.QMovie.CacheAll) 
        self.movie.setSpeed(100) 
        self.movieScreen.setMovie(movie)
        self.ui.movieScreen.setAlignment(QtCore.Qt.AlignCenter)
        self.movie.start()
Ein Fehler liegt in Z. 15
NameError: global name 'movie' is not defined
Ich habe mich anhand von:
http://unlogic.co.uk/2012/11/02/animated-gifs-in-pyqt/

In die Darstellung von animierten .gifs mit PyQt eingelesen, nur scheitere ich aktuell komplett was den Einbau dieses Codes angeht.
Ich wäre über Hilfe sehr erfreut.

Grüße;
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Du meinst wahrscheinlich ``self.movie`` und nicht ``movie``.
Das Leben ist wie ein Tennisball.
HelleR
User
Beiträge: 2
Registriert: Freitag 4. Juli 2014, 16:41

Habe meinen Code nun angepasst auf:

Code: Alles auswählen

        self.connect(self.ui.btnExitWelcomeScreen, QtCore.SIGNAL("clicked()"), self.btnExitWelcomeScreen_Click)
        self.connect(self.ui.btnCheckTransaction, QtCore.SIGNAL("clicked()"), self.btnCheckTransaction)
        self.connect(self.ui.btnClose, QtCore.SIGNAL("clicked()"), self.btnClose_Click)
        self.ui.movieScreen = QtGui.QLabel()
        self.ui.movieScreen.setSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) 
        self.ui.movieScreen.setAlignment(QtCore.Qt.AlignCenter) 
        self.ui.movie = QtGui.QMovie("geldschein.gif", QtCore.QByteArray(), self) 
        self.ui.movie.setCacheMode(QtGui.QMovie.CacheAll) 
        self.ui.movie.setSpeed(100) 
        self.ui.movieScreen.setMovie(self.ui.movie)
        self.ui.movieScreen.setAlignment(QtCore.Qt.AlignCenter)
        self.ui.movie.start()
Er rennt auch ohne Fehler, nur wird in der UI keine gif sichtbar.
Code stammt aus:
http://www.python-forum.de/viewtopic.php?f=24&t=19064

Grüße;
BlackJack

@HelleR: Also zumindest im letzten Code hat das Label kein Elternobjekt und wird auch keinem Layout hinzugefügt. Woher soll Qt denn dann wissen *wo* und *wie* das Label angezeigt werden soll?
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Ein typisches Beispiel zur Hilfe ...

Code: Alles auswählen

'''ps_AniGifPlay2.py
use PySide to play an animated gif file

(PySide is the license free version of PyQT)
you can use the Windows self-extracting installer
PySide-1.2.2.win32-py2.7.exe
or
PySide-1.2.2.win32-py3.4.exe
(uses PyQT version 4.8.6) from:
http://qt-project.org/wiki/PySide
or:
http://www.lfd.uci.edu/~gohlke/pythonlibs/
'''

from PySide.QtCore import *
from PySide.QtGui import *


class MoviePlayer(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        # setGeometry(x_pos, y_pos, width, height)
        self.setGeometry(200, 200, 400, 400)
        self.setWindowTitle("QMovie to show animated gif")

        # set up the movie screen on a label
        self.movie_screen = QLabel()
        # expand and center the label
        self.movie_screen.setSizePolicy(QSizePolicy.Expanding,
            QSizePolicy.Expanding)
        self.movie_screen.setAlignment(Qt.AlignCenter)

        self.btn_start = QPushButton("Start Animation")
        # newer connect syntax
        self.btn_start.clicked.connect(self.start)

        self.btn_stop = QPushButton("Stop Animation")
        self.btn_stop.clicked.connect(self.stop)

        main_layout = QVBoxLayout()
        main_layout.addWidget(self.movie_screen)
        main_layout.addWidget(self.btn_start)
        main_layout.addWidget(self.btn_stop)
        self.setLayout(main_layout)

        # use an animated gif file you have in the working folder
        # or give the full file path
        self.movie = QMovie("AG_Dog.gif", QByteArray(), self)
        self.movie.setCacheMode(QMovie.CacheAll)
        self.movie.setSpeed(100)
        self.movie_screen.setMovie(self.movie)
        #self.movie.start()

    def start(self):
        """sart animnation"""
        self.movie.start()

    def stop(self):
        """stop the animation"""
        self.movie.stop()


# you can replace [] with sys.argv command line
app = QApplication([])
player = MoviePlayer()
player.show()
app.exec_()

Atomkraftwerkaktienbesitzer
Antworten