Seite 1 von 1

2d Animation Test

Verfasst: Montag 26. November 2012, 21:48
von Lordoromis
Wie der Titel bereits sagt möchte ich mit Tkinter eine 2d Animation erstellen welche auf sich Knopfdruck abspielt,
Ich habe bereits einen kleinen Code geschrieben nur um auszutesten ob und wie genau es funktioniert, insgesamt tut es das aber nicht.
das fenster erscheint zwar und auch der Button, ist da mit dem richtigen text nur das Bild funktioniert nicht hoffe auf Hilfe.
Hier der (mit absolut nutztlosen Variabeln ):

Code: Alles auswählen

#Zum Beginn alle Benutzten Module

from Tkinter import*
from os import*
from sys import*

#nun alle Variabeln

XAchse = 450

YAchse = 150

UselessNumber = 1

#Hier wird das Fenster selbst bearbeitet

GameWindow = Tk("Vampiergame")


TestButton = Button(GameWindow,
                    text="Test",
                    command=UselessNumber == 2).pack()

Char = PhotoImage(file="..\game\GamePictures\TestChar.gif")

Char2 = PhotoImage(file="..\game\GamePictures\Loading.gif")

                    

GameWindow.geometry("1080x720"),
GameWindow.mainloop()

#Hier wird die "Animation" bearbeitet

if UselessNumber == 1:
    Char.pack()
else:
     if UselessNumber == 2:
        Char.pack()
     else:
          print "flu"

Re: 2d Animation Test

Verfasst: Montag 26. November 2012, 23:18
von BlackJack
@Lordoromis: Du solltest den Sternchenimport vermeiden, weil man damit alle Namen aus dem anderen Modul in den aktuellen Modulnamensraum holt. Dann bräuchte man das Konzept von Modulen nicht, wenn man doch wieder alles in einen Namensraum steckt. Das `Tkinter`-Modul enthält zum Beispiel ca. 190 Namen. Ausserdem besteht die Gefahr von Namenskollisionen. Bei `Tkinter` beispielsweise gerne mal der Konflikt zwischen `Tkinter.Image` und `PIL.Image`, wenn man nicht nur GIF und JPEG verwenden möchte.

Das `command`-Argument von `Button` erwartet eine *Funktion*, die ausgeführt wird, wenn man die Schaltfläche betätigt. Du übergibst da einen Wahrheitswert — nämlich das Ergebnis vom Vergleich zwischen `UselessNumber` und 2. Also `False`, denn der Wert von `UselessNumber` ist zu dem Zeitpunkt 1.

Die `mainloop()`-Methode blockiert solange bis das Fenster geschlossen wird. Erst danach wird der Code ausgeführt, der laut Kommentar angeblich die Animation bearbeitet. Nur das `PhotoImage` gar keine `pack()`-Methode kennt. Bilder muss man in einem passenden Widget anzeigen. Zum Beispiel einem `Tkinter.Label`.

Re: 2d Animation Test

Verfasst: Dienstag 27. November 2012, 13:22
von Lordoromis
Ich habe jetzt die ganzen Tkinter als Tk. importiert
und werde den Code nochmal ein bisschen überarbeiten
zuerst aber mal die Frage könnte das ganze aber so funktionieren wie ich mir das Vorstelle?

Edit :
habe den Code nochmal verändert und verkleinert sieht jetzt so aus:

Code: Alles auswählen

#Zum Beginn alle Benutzten Module

import Tkinter as Tk 

#nun alle Variabeln

UselessNumber = 1

#Hier wird das Fenster selbst bearbeitet

GameWindow = Tk.Tk("Vampiergame")


TestButton = Tk.Button(GameWindow,
                    text="Test",
                    command=UselessNumber == 2).pack()

Char1 = Tk.PhotoImage(file="..\game\GamePictures\TestChar.gif")

Char2 = Tk.PhotoImage(file="..\game\GamePictures\Loading.gif")

CharLabel1 = Tk.Label(GameWindow, image = Char1)
CharLabel2 = Tk.Label(GameWindow, image = Char2)

GameWindow.geometry("1080x720"),
GameWindow.mainloop()

#Hier wird die "Animation" bearbeitet

if UselessNumber == 1:
    CharLabel1.pack()
else:
     if UselessNumber == 2:
        Char2.pack()
     else:
          print "flu"
funktioniert jetzt trozdem noch nicht
wie genau hast du das denn mit mainloop() gemeint?

Re: 2d Animation Test

Verfasst: Dienstag 27. November 2012, 14:00
von EyDu
Du hast da oben in deinem Code doch noch immer einen *-Import, den solltest du erstmal loswerden.
Lordoromis hat geschrieben:funktioniert jetzt trozdem noch nicht
Das heißt? Selbes Problem wie vorher?
Lordoromis hat geschrieben:wie genau hast du das denn mit mainloop() gemeint?
Dass alles nach dem mainloop-Aufruf erst dann ausgeführt wird, wenn das Hauptfenster geschlossen wurde.

Re: 2d Animation Test

Verfasst: Dienstag 27. November 2012, 18:56
von Lordoromis
Dass alles nach dem mainloop-Aufruf erst dann ausgeführt wird, wenn das Hauptfenster geschlossen wurde.

Was giebt es den für einen andere Möglichkeit als Mainloop()

wegen dem Problem momentan öffnet sich das fenster der Button ist da aber es ist kein bild da und es kommt auch keins wenn man den Button drückt

(ich hoffe, dass ich dich mit meiner absoluten noobigkeit:D nicht zu sehr nerve)

aber danke für die Hilfe

Re: 2d Animation Test

Verfasst: Dienstag 27. November 2012, 19:41
von EyDu
Hallo.
Lordoromis hat geschrieben:Dass alles nach dem mainloop-Aufruf erst dann ausgeführt wird, wenn das Hauptfenster geschlossen wurde.

Was giebt es den für einen andere Möglichkeit als Mainloop()
Der mainloop-Aufruf ist so schon in Ordnung, du suchst noch die after-Methode auf Tkinter-Objekte. Dort kannst du eine Funktion angeben und wie lange es dauern soll, bis diese aufgerufen wird. Am besten bemühst du die Formussuche mal nach "Tkinter after", da gibt es einige Threads zu.
Lordoromis hat geschrieben:wegen dem Problem momentan öffnet sich das fenster der Button ist da aber es ist kein bild da und es kommt auch keins wenn man den Button drückt
Schaffst du es denn schon ein einzelnes Bild anzuzeigen? Ohne das man auf einen Button klicken muss. Wenn das läuft, dann ist der Rest nicht mehr so schwierig.

Lordoromis hat geschrieben:(ich hoffe, dass ich dich mit meiner absoluten noobigkeit:D nicht zu sehr nerve)
Wenn es uns zu dämlich wird, dann wirst du es schon merken ;-)

Re: 2d Animation Test

Verfasst: Samstag 1. Dezember 2012, 20:05
von Lordoromis
Irgendwie verstehe ich die After Methode nicht, was genau macht die?

Re: 2d Animation Test

Verfasst: Samstag 1. Dezember 2012, 22:53
von BlackJack
@Lordoromis: Die sorgt dafür das (ungefähr) nach der übergebenen Anzahl der Millisekunden die übergebene Funktion (oder ganz allgemein das Aufrufbare Objekt) vom GUI-Toolkit aufgerufen wird. Optional kann man noch weitere Argumente übergeben, die der Funktion dann beim Aufruf übergeben werden.

Re: 2d Animation Test

Verfasst: Dienstag 4. Dezember 2012, 18:47
von Lordoromis
ich verstehs nicht, warum funktioniert das nicht ?

Code: Alles auswählen

#Zum Beginn alle Benutzten Module

import Tkinter as Tk


#nun alle Variabeln

UselessNumber = 1


#Hier wird das Fenster selbst bearbeitet

GameWindow = Tk.Tk("Vampiergame")

TestButton = Tk.Button(GameWindow,
                    text="Test",
                    command=UselessNumber == 2).pack()

Char1 = Tk.PhotoImage(file="..\game\GamePictures\TestChar.gif")

Char2 = Tk.PhotoImage(file="..\game\GamePictures\Loading.gif")

CharLabel1 = Tk.Label(GameWindow, image = Char1)
CharLabel2 = Tk.Label(GameWindow, image = Char2)

GameWindow.geometry("1080x720")
GameWindow.after(5, CharLabel1)
GameWindow.mainloop()


#Hier wird die "Animation" bearbeitet

if UselessNumber == 1:
    CharLabel1.pack()
else:
     if UselessNumber == 2:
        Char2.pack()
     else:
          print "flu"
    
wie gesagt ich hab eigentlich relativ wenig ahnung vom Programmieren

Re: 2d Animation Test

Verfasst: Dienstag 4. Dezember 2012, 18:54
von EyDu
Vielleicht solltest du einfach noch einmal alle Antworten durchlesen und verstehen. Die Lösungen wurden schon genannt.

Re: 2d Animation Test

Verfasst: Freitag 14. Dezember 2012, 22:28
von Lordoromis
Tut mir leid, dass ich erst jezt wieder antworte aber in lezter Zeit hatte ich aufgrund fehlender Erfolge keine Lust mehr mich am Programmieren zu versuchen, also habe ich mein altes Project mehr oder weniger auf Eis gelegt und habe jetzt einfach so zum Tkinter programieren 2 Fragen

1.Kann man 2 Bilder übereinanderschieben?

2.Was meint Phyton wenn es sagt can't invoke ....aplication has been destroyed?

Re: 2d Animation Test

Verfasst: Samstag 15. Dezember 2012, 00:03
von BlackJack
1. Ja‽
2. Keine Ahnung was Phyton ist. Und Python wird wohl nicht „can't invoke ....aplication has been destroyed”. Vielleicht etwas ähnliches und ohne Schreibfehler. Da wäre es aber sehr hilfreich den kompletten Traceback zu kennen und auch den Quelltext der dazu geführt hat.

Vielleicht solltest Du nicht mit GUI-Programmierung anfangen. Das ist etwas wo man die Programmiersprache schon kennen sollte. Und vor allem auch objektorientierte Programmierung.

Re: 2d Animation Test

Verfasst: Mittwoch 16. Januar 2013, 23:17
von Lordoromis
Ich hab jetzt nochmal ein wenig herumprobiert und den Cod insgesamt gekürzt:

Code: Alles auswählen

GameWindow = Tk.Tk("Vampiergame")


Char1 = Tk.PhotoImage(file="..\game\GamePictures\TestChar.gif")

Char2 = Tk.PhotoImage(file="..\game\GamePictures\Loading.gif")

CharLabel1 = Tk.Label(GameWindow, image = Char1)
CharLabel2 = Tk.Label(GameWindow, image = Char2)

GameWindow.geometry("1080x720")

##hier wird die Animation bearbeitet

GameWindow.after(2000, CharLabel1.pack())



GameWindow.mainloop()

    
Nun habe ich das Problem , dass Phyton die after-Methode zwar einsetzt aber das sich dann so auswirkt, dass er wen ich auf run klicke einfach die bei after angegebene Zeit wartet und dann das Fenster mit offenem Bild aufmacht.

@Blackjack, ich kann mich nicht so richtig an etwas ranhängen und wenn ich danach nicht sofort auch etwas davon habe sowieso nicht, also muss ich beinahe GUI machen da ich sobald ich das gnaze Animations-Gedönsens behersche mit einem Freund zusammen ein kleines point'n click adventure zusammenbasteln könnte.

Re: 2d Animation Test

Verfasst: Donnerstag 17. Januar 2013, 00:16
von BlackJack
@Lordoromis: In dem Quelltext gibt es keine Schaltfläche auf die man klicken könnte. Und die `after()`-Methode wird falsch benutzt. Da muss man ein aufrufbares Objekt wie beispielsweise eine Funktion oder Methode übergeben und nicht diese Funktion oder Methode selbst aufrufen und ihren Rückgabewert übergeben.

Du willst also in Phyton (sic) programmieren ohne Dich da ranzuhängen (sic) und die Grundlagen zu lernen‽ Das wird nichts werden…