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

Beitragvon nemomuk » Samstag 8. Dezember 2007, 17:30

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=]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"[/code]

Die Bilder existieren definitiv...
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 8. Dezember 2007, 17:38

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

Beitragvon nemomuk » Samstag 8. Dezember 2007, 17:56

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


Nein?! Wo wurde mir das empfohlen?!

Danke!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 8. Dezember 2007, 18:00

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

Beitragvon nemomuk » Samstag 8. Dezember 2007, 18:45

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

Beitragvon Jan-Peer » Samstag 8. Dezember 2007, 22:43

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

Beitragvon nemomuk » Sonntag 9. Dezember 2007, 11:31

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=]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)[/code]

Auch nach längerer Suche, konnte ich das Problem nicht lösen - hat von euch jemand eine Ahnung?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 9. Dezember 2007, 11:44

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

Beitragvon nemomuk » Sonntag 9. Dezember 2007, 11:50

Danke...

Ich bin so dumm...

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder