Variablen Namen in Schleife ansprechen...

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.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Code: Alles auswählen

from Tkinter import *
import random

gui = Tk()

farben = ["Eichel", "Gras", "Herz", "Schelln"]
werte = range(6, 11) + ["Sau", "Ober", "Unter"]
kombiniert = []
for farbe in farben:
	for wert in werte:
		kombiniert.append([wert, farbe])
def mischen():
	random.shuffle(kombiniert)
	karten = []
	for wert,farbe in kombiniert:
		bild = PhotoImage(file="bilder/spielblatt/%s_%s.jpg" %(wert, farbe))
		karten.append(Label(gui,image=bild))
	return karten

karten = mischen()
for x in karten:
	x.pack()
gui.mainloop()
Ich frage mich nur, warum dann das hier jetzt nicht geht...

er sagt mir folgendes:

Code: Alles auswählen

Traceback (most recent call last):
  File "D:\Dokumente und Einstellungen\Besitzer\Desktop\Python\schafkopf\index.py", line 20, in <module>
    karten = mischen()
  File "D:\Dokumente und Einstellungen\Besitzer\Desktop\Python\schafkopf\index.py", line 16, in mischen
    bild = PhotoImage(file="bilder/spielblatt/%s_%s.jpg" %(wert, farbe))
  File "D:\Programme\Python\lib\lib-tk\Tkinter.py", line 3270, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "D:\Programme\Python\lib\lib-tk\Tkinter.py", line 3226, in __init__
    self.tk.call(('image', 'create', imgtype, name,) + options)
TclError: couldn't recognize data in image file "bilder/spielblatt/Sau_Gras.jpg"
Die Bilder existieren definitiv...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Schon wieder Stern-Importe? Macht es Spaß die gut gemeinten Tipps der Leute hier zu ignorieren?

PhotoImage unterstützt keine JPEGs (first Google-hit btw), dazu brauchst du die PIL.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Schon wieder Stern-Importe? Macht es Spaß die gut gemeinten Tipps der Leute hier zu ignorieren?
Nein?! Wo wurde mir das empfohlen?!

Danke!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

SchneiderWeisse hat geschrieben:
Schon wieder Stern-Importe? Macht es Spaß die gut gemeinten Tipps der Leute hier zu ignorieren?
Nein?! Wo wurde mir das empfohlen?!
Das wird hier normalerweise jedem gesagt, der Code mit Stern-Importen postet. Such mal nach "Stern-Import". Und guck auf [wiki]Import[/wiki].

Edit: Hab jetzt geschaut, du hast scheinbar echt noch kein Programm gepostet, welches Stern-Importe nutzt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

ich habe jetzt versucht das Bild mit PIL zu öffnen und in Tkinter weiter zu verwenden...

Code: Alles auswählen

import Tkinter as tk
import Image
import ImageTk

gui = tk.Tk()
bild1 = Image.open("bilder/spielblatt/7_Herz.jpg")
bild = ImageTk.PhotoImage(bild1)
label = tk.Label(gui,image=bild)

label.tk.pack()
gui.mainloop()
Er sagt mir was von Attribute Error: pack

//Hab ich jetzt richtig importiert?^^
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

label ist bereits ein Objekt vom Typ tk.Label - insofern brauchst du `tk` bei `pack` nicht mehr anzugeben.
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Danke!

Habe jetzt versucht das ganze mit Listen zu machen, bekomme aber bei folgendem Script immer eine Fehlermeldung...:

Code: Alles auswählen

import Tkinter as tk
import Image
import random

gui = tk.Tk()

farben = ["Eichel", "Gras", "Herz", "Schelln"]
werte = range(7, 11) + ["Sau", "Ober", "Unter"]
kombiniert = []
for farbe in farben:
	for wert in werte:
		kombiniert.append([wert, farbe])
random.shuffle(kombiniert)

karten = []
bilder = []
for wert,farbe in kombiniert:
	bild_konvert = Image.open("bilder/spielblatt/%s_%s.jpg" %(wert, farbe))
	bilder.append(tk.PhotoImage(bild_konvert))
for bild in bilder:
	karten.append(tk.Label(gui,image=bild))

for x in karten:
	x.pack()
gui.mainloop()

Code: Alles auswählen

Traceback (most recent call last):
  File "D:\Dokumente und Einstellungen\Besitzer\Desktop\Python\schafkopf\index.py", line 21, in <module>
    karten.append(tk.Label(gui,image=bild))
  File "D:\Programme\Python\lib\lib-tk\Tkinter.py", line 2464, in __init__
    Widget.__init__(self, master, 'label', cnf, kw)
  File "D:\Programme\Python\lib\lib-tk\Tkinter.py", line 1930, in __init__
    (widgetName, self._w) + extra + self._options(cnf))
TypeError: __str__ returned non-string (type instance)
Auch nach längerer Suche, konnte ich das Problem nicht lösen - hat von euch jemand eine Ahnung?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Guck doch einfach mal in effbots Beispiel, dort ist doch genau beschrieben, dass du, nachdem du das `Image` geladen hast, es noch in ein `ImageTk` wandeln musst.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Danke...

Ich bin so dumm...
Antworten