ja hab from tkinter import * eingegeben. Ist das schlimm? Wie kann ich das anders eingeben? :S
gruß,
nevergod
TclError: image "pyimage1" doesn't exist
eigentlich sollte man module immer mit "import modul" öffnen also in deinem Fall zB.
so würdest du alle Klassenobjekte die du aus dem tkinter-Modul benötigst über tk aufrufen, also statt Button(...) - tk.Button(...).
So kann kein Konflikt auftreten, wenn Klassenobjekte mit gleiche mNamen in den Modulen, die du importierst hast, existieren.
Code: Alles auswählen
import Tkinter as tk
So kann kein Konflikt auftreten, wenn Klassenobjekte mit gleiche mNamen in den Modulen, die du importierst hast, existieren.
Kannst du es einmal mit einem anderen .gif-Bildchen probieren, welches du nicht selber erstell hast?nevergod hat geschrieben:habs jetzt soweit hinbekommen. Denn es kommt jetzt ein anderer fehler ^^couldnt recognize image data!
Gruß wuf

Take it easy Mates!
habs mit der as tk methode versucht, also vor jedes labl button Tk etc ein tk. gesetzt und as tk importiert.
jetzt kommt da "Exception in Tkinter callback" wenn ich das hauptfenster lade. Ich poste mal den gesammten code. (Soll eine art Browsergame im gui werden.)
was mache ich falsch :S
jetzt kommt da "Exception in Tkinter callback" wenn ich das hauptfenster lade. Ich poste mal den gesammten code. (Soll eine art Browsergame im gui werden.)
Code: Alles auswählen
# -*- coding: cp1252 -*-
import Tkinter
import Image
import ImageTk
# INTRO_________
import Tkinter as tk
root=tk.Tk()
lab1=tk.Label(root,text="Wilkommen zu Crackgame!!! Dein Dealergame im GUI!!")
lab1.pack()
def newgame():
newfenster=tk.Tk()
lab1=tk.Label(newfenster,text="""Bitte den neuen Spielernamen eingeben.
Alte Spielstände werden überschrieben!""")
ent1=tk.Entry(newfenster)
def makeacc():
accname = ent1.get()
writefile = open("bin/account/1.txt",'w')
writefile.close()
x = open("bin/account/1.txt",'w')
x.write("%s" % accname)
x.close()
writefile = open("bin/account/2.txt",'w')
writefile.close()
x = open("bin/account/2.txt",'w')
x.write("500")
x.close()
writefile = open("bin/account/3.txt",'w')
writefile.close()
x = open("bin/account/3.txt",'w')
x.write("1")
x.close()
writefile = open("bin/account/4.txt",'w')
writefile.close()
x = open("bin/account/4.txt",'w')
x.write("0")
x.close()
writefile = open("bin/account/5.txt",'w')
writefile.close()
x = open("bin/account/5.txt",'w')
x.write("0")
x.close()
writefile = open("bin/account/6.txt",'w')
writefile.close()
x = open("bin/account/6.txt",'w')
x.write("0")
x.close()
writefile = open("bin/account/7.txt",'w')
writefile.close()
x = open("bin/account/7.txt",'w')
x.write("0")
x.close()
writefile = open("bin/account/8.txt",'w')
writefile.close()
x = open("bin/account/8.txt",'w')
x.write("0")
x.close()
writefile = open("bin/account/9.txt",'w')
writefile.close()
x = open("bin/account/9.txt",'w')
x.write("0")
x.close()
writefile = open("bin/account/10.txt",'w')
writefile.close()
x = open("bin/account/10.txt",'w')
x.write("0")
x.close()
writefile = open("bin/account/11.txt",'w')
writefile.close()
x = open("bin/account/11.txt",'w')
x.write("0")
x.close()
writefile = open("bin/account/12.txt",'w')
writefile.close()
x = open("bin/account/12.txt",'w')
x.write("0")
x.close()
writefile = open("bin/account/13.txt",'w')
writefile.close()
x = open("bin/account/13.txt",'w')
x.write("0")
x.close()
writefile = open("bin/account/14.txt",'w')
writefile.close()
x = open("bin/account/14.txt",'w')
x.write("0")
x.close()
x = open("bin/account/15.txt",'w')
x.write("0")
x.close()
erfolg=Tk()
lab1=tk.Label(erfolg,text="Erfolg! Bitte mit Spiel fortsetzen losspielen!")
lab1.pack()
but1=tk.Button(erfolg,text="OK",command=erfolg.destroy)
but1.pack()
okbut=tk.Button(newfenster,text="OK",command=makeacc)
close=tk.Button(newfenster,text="Abbrechen",command=newfenster.destroy)
lab1.pack()
ent1.pack()
okbut.pack()
close.pack()
newgame=tk.Button(root,text="Neues Spiel",command=newgame)
def contin():
fort=tk.Tk()
lab1=tk.Label(fort,text="Sicherheitsmaßnahme: Bitte geben sie hier ihre ID ein.")
lab1.grid(columnspan=2)
identify=tk.Entry(fort)
#HAUPTSPIELFENSTER________________
def GAME():
stat=open("bin/account/1.txt",'r')
eingabe=identify.get()
name=stat.readline()
if name==eingabe:
main=tk.Tk()
space=tk.Label(main,text="")
wmessage=tk.Label(main,text="""Wilkommen zu "Crackgame" dem Python-Dealergame by NeverGod """)
anfertigenbutton=tk.Button(main,text="Drogen herstellen",height=2,width=16)
verkaufenbutton=tk.Button(main,text="Drogen verkaufen",height=2,width=16)
gebietebutton=tk.Button(main,text="Gebiete beziehen",height=2,width=16)
skills=tk.Button(main,text="Skillpunkte vergeben",height=2,width=16)
veranstaltungen=tk.Button(main,text="Veranstaltungen",height=2,width=16)
gebaudebutton=tk.Button(main,text="Gebäude",height=2,width=16)
#LAGERBESTAND_________________
def lagerwin():
lager=tk.Tk()
descript=Label(lager,text="""Wilkommen in deinem Lager! Hier siehst du was du gerade da hasst. Denke daran nicht
alles selber zu konsumieren!!!""")
space=Label(lager,text="")
space2=Label(lager,text="")
space3=Label(lager,text="")
space4=Label(lager,text="")
space5=Label(lager,text="")
space6=Label(lager,text="")
def pil_to_tk(pil_image):
tk_image = ImageTk.PhotoImage("RGBA", pil_image.size)
tk_image.paste(pil_image)
return tk_image
img = Image.open("bin/img/lolliava.gif")
photo = pil_to_tk(img)
lolliimglab=tk.Label(lager, image=photo)
lollinamelab=tk.Label(lager,text="Lollipop´s : ")
x=open("bin/account/9.txt",'r')
lollisread=x.readline()
lollis=int(lollisread)
x.close()
lolliamountlab=tk.Label(lager,text="%s gramm" % lollis)
descript.grid(columnspan=3)
space.grid(row=2)
lolliimglab.grid(row=3,column=1)
lollinamelab.grid(row=3,column=2)
lolliamountlab.grid(row=3,column=3)
lagerbutton=tk.Button(main,text="Lagerbestand",height=2,width=16,command=lagerwin)
namelabel=tk.Label(main,text="Name : ")
def namestat():
x=open("bin/account/1.txt",'r')
namestat=x.readline()
x.close()
namelabel1=tk.Label(main,text="%s" % namestat)
def update_name():
x=open("bin/account/1.txt",'r')
namestat=x.readline()
x.close()
namelabel1.config(text=namestat)
namelabel1.after(1000,update_name)
def namestat():
x=open("bin/account/1.txt",'r')
namestat=x.readline()
x.close()
namelabel1.after(1000,update_name)
x=open("bin/account/2.txt",'r')
geldread=x.readline()
geld=int(geldread)
x.close()
geldlab=Label(main,text="Geld : ")
geldlabel=Label(main,text="%s $" % geld)
def update_geld():
x=open("bin/account/2.txt",'r')
geldread=x.readline()
geld=int(geldread)
x.close()
geldlabel.config(text="%s $" % geld)
geldlabel.after(1000,update_geld)
geldlabel.after(1000,update_geld)
levellabel=tk.Label(main,text="Level : ")
def level():
x=open("bin/account/3.txt",'r')
levelread=x.readline()
level=int(levelread)
x.close()
levellabel1=tk.Label(main,text=level)
def update_level():
x=open("bin/account/3.txt",'r')
levelread=x.readline()
level=int(levelread)
x.close()
levellabel1.config(text=level)
levellabel1.after(1000,update_level)
levellabel1.after(1000,update_level)
explabel=tk.Label(main,text="EXP : ")
def exp():
x=open("bin/account/4.txt",'r')
expread=x.readline()
exp=int(expread)
x.close()
explabel1=tk.Label(main,text=exp)
def update_exp():
x=open("bin/account/4.txt",'r')
expread=x.readline()
exp=int(expread)
x.close()
explabel1.config(text=exp)
explabel1.after(1000,update_exp)
explabel1.after(1000,update_exp)
splabel=tk.Label(main,text="Skillpoints : ")
def skillpoint():
x=open("bin/account/5.txt",'r')
skillpread=x.readline()
skillpoint=int(skillpread)
x.close()
splabel1=tk.Label(main,text=skillpoint)
def update_skillpoint():
x=open("bin/account/5.txt",'r')
skillpread=x.readline()
skillpoint=int(skillpread)
x.close()
splabel1.config(text=skillpoint)
splabel.after(1000,update_skillpoint)
splabel1.after(1000,update_skillpoint)
chemlevllab=tk.Label(main,text="Chemiker Skilllevel : ")
def chemlvl():
x=open("bin/account/6.txt",'r')
chemlvlread=x.readline()
chemlvl=int(chemlvlread)
x.close()
chemlevllab1=tk.Label(main,text=chemlvl)
def update_chemlvl():
x=open("bin/account/6.txt",'r')
chemlvlread=x.readline()
chemlvl=int(chemlvlread)
x.close()
chemlevllab1.config(text=chemlvl)
chemlevllab1.after(1000,update_chemlvl)
chemlevllab1.after(1000,update_chemlvl)
werblevllab = tk.Label(main,text="Werbegenie Skilllevel : ")
def werblvl():
x=open("bin/account/7.txt",'r')
werblvlread=x.readline()
werblvl=int(werblvlread)
x.close()
werblevllab1 = tk.Label(main,text=werblvl)
def update_werblvl():
x=open("bin/account/7.txt",'r')
werblvlread=x.readline()
werblvl=int(werblvlread)
x.close()
werblevllab1.config(text=werblvl)
werblevllab1.after(1000,update_werblvl)
werblevllab1.after(1000,update_werblvl)
verhlevllab = tk.Label(main,text="Verhandlngsgeschick Skilllevel : ")
def verhlvl():
x=open("bin/account/8.txt",'r')
verhlvlread=x.readline
verhlvl=int(verhlvlread)
x.close()
verhlevellab1=tk.Label(main,text=verhlvl)
def update_verhlvl():
x=open("bin/account/8.txt",'r')
verhlvlread=x.readline()
verhlvl=int(verhlvlread)
x.close()
verhlevellab1.config(text=verhlvl)
verhlevellab1.after(1000,update_verhlvl)
verhlevellab1.after(1000,update_verhlvl)
ruhmlabel=tk.Label(main,text="Ruhm : ")
def ruhm():
x=open("bin/account/15.txt",'r')
ruhmread=x.readline()
ruhm=int(ruhmread)
x.close()
ruhmlabel1=tk.Label(main,text=ruhm)
def update_ruhm():
x=open("bin/account/15.txt",'r')
ruhmread=x.readline()
ruhm=int(ruhmread)
x.close()
ruhmlabel1.config(text=ruhm)
ruhmlabel1.after(1000,update_ruhm)
ruhmlabel1.after(1000,update_ruhm)
space2=tk.Label(main,text="")
space.grid()
wmessage.grid(column=1,columnspan=3)
anfertigenbutton.grid(row=2)
verkaufenbutton.grid(row=4)
gebietebutton.grid(row=6)
skills.grid(row=8)
veranstaltungen.grid(row=10)
gebaudebutton.grid(row=12)
lagerbutton.grid(row=14)
namelabel.grid(row=3,column=2)
namelabel1.grid(row=3,column=3)
geldlab.grid(row=4,column=2)
geldlabel.grid(row=4,column=3)
levellabel.grid(row=5,column=2)
levellabel1.grid(row=5,column=3)
explabel.grid(row=6,column=2)
explabel1.grid(row=6,column=3)
splabel.grid(row=7,column=2)
splabel1.grid(row=7,column=3)
chemlevllab.grid(row=8,column=2)
chemlevllab1.grid(row=8,column=3)
werblevllab.grid(row=9,column=2)
werblevllab1.grid(row=9,column=3)
verhlevllab.grid(row=10,column=2)
verhlevellab1.grid(row=10,column=3)
ruhmlabel.grid(row=11,column=2)
ruhmlabel1.grid(row=11,column=3)
space.grid(row=13)
else:
noway=tk.Tk()
label=tk.Label(noway,text="Falsche ID!!")
button=tk.Button(noway,text="OK",command=noway.destroy)
label.pack()
button.pack()
#HAUPTSPIELFENSTER ENDE_______
Identok=tk.Button(fort,text="Fortsetzen!",command=GAME)
identify.grid(row=2,column=0)
Identok.grid(row=2,column=1)
continuegame=tk.Button(root,text="Fortsetzen",command=contin)
close=tk.Button(root,text="Schließen",command=root.destroy)
newgame.pack()
continuegame.pack()
close.pack()
root.mainloop()
#INRO ENDE________
Weil du zweimal Tkinter lädst
du darfst das modul nur einmal laden.
Das "as" dient nur als zuweisung für einen anderen Namen zur Erreibarkeit des Moduls.
Nur um das Tkinter etwas kürzer zu machen, bei nur "import Tkinter", müsstest du immer Tkinter.Button(...) schreiben.
Das war nur da um es dir etwas leichter zumachen, das überall hinzuzufügen.
Also so wie es jetzt ist musst du einfach nur das "import Tkinter" oben raus nehmen.
Code: Alles auswählen
# -*- coding: cp1252 -*-
import Tkinter # <----- hier
import Image
import ImageTk
# INTRO_________
import Tkinter as tk # <----- und hier
Das "as" dient nur als zuweisung für einen anderen Namen zur Erreibarkeit des Moduls.
Nur um das Tkinter etwas kürzer zu machen, bei nur "import Tkinter", müsstest du immer Tkinter.Button(...) schreiben.
Das war nur da um es dir etwas leichter zumachen, das überall hinzuzufügen.
Also so wie es jetzt ist musst du einfach nur das "import Tkinter" oben raus nehmen.
Zuletzt geändert von Xynon1 am Donnerstag 14. Oktober 2010, 13:40, insgesamt 1-mal geändert.
soweit so gut, jetzt kommt wieder pymage1 does not exist -.-
verzweifle gleich.
gruß,
nevergod
Code: Alles auswählen
def lagerwin():
lager=tk.Tk()
descript=tk.Label(lager,text="""Wilkommen in deinem Lager! Hier siehst du was du gerade da hasst. Denke daran nicht
alles selber zu konsumieren!!!""")
space=tk.Label(lager,text="")
space2=tk.Label(lager,text="")
space3=tk.Label(lager,text="")
space4=tk.Label(lager,text="")
space5=tk.Label(lager,text="")
space6=tk.Label(lager,text="")
def pil_to_tk(pil_image):
tk_image = ImageTk.PhotoImage("RGBA", pil_image.size)
tk_image.paste(pil_image)
return tk_image
img = Image.open("bin/img/lolliava.gif")
photo = pil_to_tk(img)
lolliimglab=tk.Label(lager, image=photo)
lollinamelab=tk.Label(lager,text="Lollipop´s : ")
x=open("bin/account/9.txt",'r')
lollisread=x.readline()
lollis=int(lollisread)
x.close()
lolliamountlab=tk.Label(lager,text="%s gramm" % lollis)
descript.grid(columnspan=3)
space.grid(row=2)
lolliimglab.grid(row=3,column=1)
lollinamelab.grid(row=3,column=2)
lolliamountlab.grid(row=3,column=3)
gruß,
nevergod
@nevergod: Es ist immer noch das gleiche Problem: Du musst solange das Bild dargestellt werden soll, eine Referenz darauf behalten. Du bindest das an den Namen `photo`. Der Name ist aber lokal zur `lagerwin()`-Funktion. Wenn die abgearbeitet wurde, verschwindet der Name `photo` und damit wird der Speicher für das Bild freigegeben.
Ansonsten solltest Du dringend diese ganzen Quelltextwiederholungen durch Schleifen ersetzen und aufhören nichtssagende und durchnummerierte Namen zu verwenden.
Ansonsten solltest Du dringend diese ganzen Quelltextwiederholungen durch Schleifen ersetzen und aufhören nichtssagende und durchnummerierte Namen zu verwenden.
Hallo nevergod
Probier einmal mit:
Gruß wuf 
Probier einmal mit:
Code: Alles auswählen
root.photo = pil_to_tk(img)
lolliimglab=tk.Label(lager, image=root.photo)

Take it easy Mates!
@nevergod: Üblicherweise bindet man das Bild an das Objekt von der Methode in der es erstellt wurde -- da Du das ganze mit verschachtelten Funktionen löst geht das natürlich so nicht.
Code: Alles auswählen
import Tkinter as tk
import Image
import ImageTk
def lagerwin(lager, photo):
descript=tk.Label(lager,text="""Wilkommen in deinem Lager! Hier siehst du was du gerade da hast. Denke daran nicht
alles selber zu konsumieren!!!""")
space=tk.Label(lager,text="")
space2=tk.Label(lager,text="")
space3=tk.Label(lager,text="")
space4=tk.Label(lager,text="")
space5=tk.Label(lager,text="")
space6=tk.Label(lager,text="")
lolliimglab=tk.Label(lager, image=photo)
lollinamelab=tk.Label(lager,text="Lollipop´s : ")
x=open("bin/account/9.txt",'r')
lollisread=x.readline()
lollis=int(lollisread)
x.close()
lolliamountlab=tk.Label(lager,text="%s gramm" % lollis)
descript.grid(columnspan=3)
space.grid(row=2)
lolliimglab.grid(row=3,column=1)
lollinamelab.grid(row=3,column=2)
lolliamountlab.grid(row=3,column=3)
if __name__ == "__main__":
def pil_to_tk(pil_image):
tk_image = ImageTk.PhotoImage("RGBA", pil_image.size)
tk_image.paste(pil_image)
return tk_image
img = Image.open("bin/img/lolliava.gif")
photo = pil_to_tk(img)
root = tk.Tk()
lagerwin(root, photo)
btw. kennst du eigentlich den unterschied zwischen lokalen und globalen variablen.
Bzw. was hier vorallem wichtig ist, die Gültigkeitsbereiche einer variable ?
Hallo nevergod
Hier noch etwas zum ausprobieren:
Gruß wuf 
Hier noch etwas zum ausprobieren:
Code: Alles auswählen
def lagerwin():
lager = tk.Toplevel() #Tk()
Code: Alles auswählen
#photo = pil_to_tk(img)
lager.photo = pil_to_tk(img)
#lolliimglab=tk.Label(lager, image=photo)
lolliimglab = tk.Label(lager, image=lager.photo)

Take it easy Mates!
Hallo nevergod
Als nächstes würde ich alle:mit Ausnahme von:
ersetzen durch:
Bei deinem Skript hatte es noch einige Labels bei denen das vorgesetzte tk. fehlte. Nehme aber an du hast dies schon herausgefunden und korrigiert.
Gruß wuf
Als nächstes würde ich alle:
Code: Alles auswählen
tk.Tk()
Code: Alles auswählen
root = tk.Tk()
Code: Alles auswählen
tk.Toplevel()
Gruß wuf

Take it easy Mates!