gifs in Python 3

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
esso.es
User
Beiträge: 1
Registriert: Dienstag 21. Juli 2015, 23:04

hi Leute,

ich hab vor gut zwei monaten mit python 3 angefangen.
nach dieser einarbeitungszeit wollte ich nun ein kleines text strategie spiel, welches ich aus einer laune herraus auf nen c64 begonnen habe, fertig schreiben und auf den pc bringen.
keine angst... ich versuche nicht basic code in python laufen zu lassen... ich schreibe alles neu 8)

für das hauptmenü diese spiels wollte ich ein animiertes gif einbauen. doch scheiter ich schon dabei module wie PIL oder pygame zum laufen zu bekommen...

als system verwende ich os x yosemite...

hat wer nen link, wo gezeigt wird wie man diese module unter python 3 zum laufen bekommt?
gibt es eine alternativ lösung für das problem "animiertes gif in python 3"?
habe ich mit python 3 eine schlechte wahl getroffen? - da schein es ja ein haufen probleme zu geben...

danke für eure hilfe
mfg
esso.es
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Weiß nicht, kann tkinter das nicht?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

Animierte GIFs können m. E. die wenigsten. Verwendet man heutzutage überhaupt noch GIF-Dateien?

Und was heißt hier "nicht ans Laufen bekommen". Sind es Fehlermeldungen (!) bei der Installation, beim Verwenden, etc.?

Ich "bewerbe" hier mal pyglet als Alternative zu pygame. Aber vielleicht sollte die Konsole/Eingabeaufforderung für ein textbasiertes Spiel zunächst ausreichen.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

"nicht ans Laufen bekommen" könnte heißen, das die GIF Ani nicht läuft, sondern es beim statischen Anfangsframe bleibt?!?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Nein, Tkinter can das animated GIF nicht. Ich benütze PyQt dafür und zwar QMovie(), das geht gut. Hier ein Beispiel ...

Code: Alles auswählen

''' pqt_AniGifPlay2.py
use PyQt's QMovie widget to play an animated gif
added buttons to start and stop animation

tested on Anaconda 2.2.0 (x86_64) with Python 3.4.3
downloaded from http://continuum.io/downloads
comes with
PyQT version = 4.11.3

OS X 10.10.4
'''

from PyQt4.QtCore import *
from PyQt4.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)

        btn_start = QPushButton("Start Animation")
        self.connect(btn_start, SIGNAL("clicked()"), self.start)

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

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

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

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

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


app = QApplication([])
player = MoviePlayer()
player.show()
app.exec_()
Atomkraftwerkaktienbesitzer
BlackJack

Ich würde mich mal bwbg anschliessen: Bevor man bei einem text-/konsolenbasierten Spiel so etwas wie Qt einbindet nur um ein GIF zu animieren, sollte man vielleicht noch mal über die bedeutung von text-/konsolenbasiert nachdenken. Entweder man macht das als Textprogramm, oder halt gleich komplett grafisch. Wobei man sich dabei als Anfänger auch gerne mal übernehmen kann wenn man alles, inklusive eines GUI-Rahmenwerkes, auf einmal lernt oder das erste mal praktisch einsetzt.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Na, da muß doch ein "GIF-Ani to ASCII-Art" Konverter her :P

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

@jens: Dann aber mittels M6809-Emulation ;)

P.S. Ich wollte auch schon immer mal ein Spiel entwickeln :?
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Zur einer richtigen Spielentwicklung ist Python doch nicht sehr gut!
Atomkraftwerkaktienbesitzer
Benutzeravatar
bwbg
User
Beiträge: 407
Registriert: Mittwoch 23. Januar 2008, 13:35

OT: Was heißt hier "richtig"? Ein Spiel, welches Spaß macht, ist auch (und besonders) mit Python möglich. Grafisch könnte man mit modernem OpenGL auch noch einiges rausholen.
"Du bist der Messias! Und ich muss es wissen, denn ich bin schon einigen gefolgt!"
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Notwendigerweise kann man auch eine Reihe von Einzelbildern benützen und dann das Ganze mit Tkinter zeitgemäß ablaufen lassen ...

Code: Alles auswählen

''' tk_animatedGIF1.py
Mimic an animated GIF displaying a series of GIFs.
An animated GIF was used to create the series of GIFs 
with one of the common GIF animator utilities.
(dns)
'''

import time
# Python3 use tkinter, Python2 use Tkinter
import tkinter as tk

root = tk.Tk()

# have these image files in the working folder
imagelist = ["dog001.gif","dog002.gif","dog003.gif",
             "dog004.gif","dog005.gif","dog006.gif",
             "dog007.gif"]

# extract width and height info
photo = tk.PhotoImage(file=imagelist[0])
width = photo.width()
height = photo.height()
canvas = tk.Canvas(width=width, height=height)
canvas.pack()

# create a list of image objects
giflist = []
for imagefile in imagelist:
    photo = tk.PhotoImage(file=imagefile)
    giflist.append(photo)

# loop through the gif image objects for some time
for k in range(0, 1000):
    for gif in giflist:
        canvas.delete('all')
        canvas.create_image(width/2.0, height/2.0, image=gif)
        canvas.update()
        time.sleep(0.1)

root.mainloop()
Atomkraftwerkaktienbesitzer
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Ich bin am Glauben dass die Module Pyglet (OpenGL) so ziemlich Tod ist, man hört fast nichts davon. Auch Pygame (SDL) ist sehr veraltet, und die Spiele sehen recht kinderlich aus.
Atomkraftwerkaktienbesitzer
Antworten