Seite 1 von 2

Verfasst: Samstag 8. Dezember 2007, 17:30
von nemomuk

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...

Verfasst: Samstag 8. Dezember 2007, 17:38
von Leonidas
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.

Verfasst: Samstag 8. Dezember 2007, 17:56
von nemomuk
Schon wieder Stern-Importe? Macht es Spaß die gut gemeinten Tipps der Leute hier zu ignorieren?
Nein?! Wo wurde mir das empfohlen?!

Danke!

Verfasst: Samstag 8. Dezember 2007, 18:00
von Leonidas
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.

Verfasst: Samstag 8. Dezember 2007, 18:45
von nemomuk
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?^^

Verfasst: Samstag 8. Dezember 2007, 22:43
von Jan-Peer
label ist bereits ein Objekt vom Typ tk.Label - insofern brauchst du `tk` bei `pack` nicht mehr anzugeben.

Verfasst: Sonntag 9. Dezember 2007, 11:31
von nemomuk
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?

Verfasst: Sonntag 9. Dezember 2007, 11:44
von Leonidas
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.

Verfasst: Sonntag 9. Dezember 2007, 11:50
von nemomuk
Danke...

Ich bin so dumm...