Seite 1 von 2

Bild einfügen mit Tkinter

Verfasst: Dienstag 7. April 2009, 09:27
von Pascal
Warum ich diese Frage hier reinschreibe?

Diese Frage wurde schon so oft gestellt, aber ich bekomms immernoch nicht hin :(

Also nochmal gaanz langsam...

wo muss ich überhaupt das Bild speichern damit es in mein Programm kommt ? ?

ich bin mir sicher ihr könnt mir helfen

Vielen Dank



Edit (27.05.09): Neue Frage dazu auf seite 3: http://www.python-forum.de/post-136849.html#136849

Verfasst: Dienstag 7. April 2009, 09:39
von EyDu
Du solltest vielleicht ein wenig Code posten, auf raten hat sicherlich niemand Lust. Außer jemand hat gerade /dev/glaskugel zur Hand.

Das falsche Unterforum hast du auch noch getroffen ;-)

Verfasst: Dienstag 7. April 2009, 10:17
von Pascal
ohh ja ich habe das falsche Unterforum getrffen :s

na ja hier gehört es ja eigentlich hin

Verfasst: Dienstag 7. April 2009, 10:21
von Pascal
http://www.python-forum.de/topic-3133.html

das ganze gab´s ja schonmal, aber bei mir geht´s nicht

Verfasst: Dienstag 7. April 2009, 11:32
von derdon
Achso, du hast bestimmt auch wie ich diese doofe Fehlermeldung bekommen:

Code: Alles auswählen

Traceback (most recent call last):
  File "<unknown>", line ?, in Nirvana
GehtNicht: Is nicht wegen geht nicht!
:lol:

Verfasst: Dienstag 7. April 2009, 12:51
von Pascal
ich glaub Python will mir mit der Fehlermeldung irgendetwas informatives sagen.

So ein launisches Programm wie derdon es zu haben scheint, wär doch auch lustig ;)

Aber mein Problem ist folgenes:

Traceback (most recent call last):
File "C:\Python24\bild.py", line 4, in ?
photo = PhotoImage(file="test.gif")
File "C:\Python24\lib\lib-tk\Tkinter.py", line 3203, in __init__
Image.__init__(self, 'photo', name, cnf, master, **kw)
File "C:\Python24\lib\lib-tk\Tkinter.py", line 3159, in __init__
self.tk.call(('image', 'create', imgtype, name,) + options)
TclError: couldn't open "test.gif": no such file or directory

Verfasst: Dienstag 7. April 2009, 12:55
von busfahrer
Hallo

so hat es bei mir funktioniert,wobei ich mir erst ein Paar mal
auf den Hinterkopf hauen mußte um zu merken das ich
ImageTk noch installieren muß :roll:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf8 -*-

import Tkinter as tk
from PIL import Image
from ImageTk import PhotoImage

root = tk.Tk()
im = Image.open("/home/thomas/bild.jpg")
foto = PhotoImage(im)
can = tk.Canvas(root,width=500,height=500)
can.grid()
can.create_image(0,0,anchor=tk.NW,image=foto)

root.mainloop()
Gruß...busfahrer

Verfasst: Dienstag 7. April 2009, 12:57
von EyDu
Die Fehlermeldung sagt doch ganz eindeutig, dass er "test.gif" nicht finden kann. Entweder heißt dein Bild also nicht "test.gif" oder es liegt im falschen Ordner. Pack das Bild mal in "C:\Python24". Überigens ein sehr schlechter Ort um Programme zu schreiben.

Bild als Frame

Verfasst: Donnerstag 16. April 2009, 17:46
von Pascal
also:

als Button und Label klappt´s:

Hier einfach mal der Quellcode:

Code: Alles auswählen

from Tkinter import * 
fenster = Tk()  
fenster.minsize(400,300) 
photo = PhotoImage(file="test.gif") #test.gif liegt im selben Ordner wie das Programm
label = Label(image=photo) 
label.image = photo 
label.pack()

Button=Button(image=photo)
Button.image = photo
Button.pack()
aber wie bekomm ich das Bild in einen Frame?

Re: Bild als Frame

Verfasst: Donnerstag 16. April 2009, 18:32
von Barabbas
Pascal hat geschrieben:also:

photo = PhotoImage(file="test.gif")
Ich glaube fast, dass du das Skript vom falschen Verzeichnis aus gestartet hast? Wenn du keine Pfadangabe machst, wird Python die Datei test.gif immer im aktuellen Verzeichnis suchen - und das ist nicht zwingend das Verzeichnis des Skriptes.

Re: Bild als Frame

Verfasst: Donnerstag 16. April 2009, 18:43
von Pascal
Barabbas hat geschrieben:
Ich glaube fast, dass du das Skript vom falschen Verzeichnis aus gestartet hast?
solange es funktioniert is doch ok, oder?

aber wie geht das mit dem Bild als Frame...

Verfasst: Donnerstag 16. April 2009, 18:49
von derdon
"Hauptsache, es funktioniert" ist keine gute Einstellung für einen Programmierer. Benutze lieber das os.path Modul (speziell die Funktionen join und abspath werden in diesem Fall wohl interessant sein).

Re: Bild als Frame

Verfasst: Donnerstag 16. April 2009, 19:14
von numerix
Pascal hat geschrieben:solange es funktioniert is doch ok, oder?
Nein! Siehe Kommentar von derdon.
Pascal hat geschrieben:aber wie geht das mit dem Bild als Frame...
Indem du z.B. ein Label mit Bild in einen Frame steckst ... :wink:

Verfasst: Donnerstag 16. April 2009, 19:20
von wuf
Hallo Pascal

Hier ein Beispiel:
http://paste.pocoo.org/show/112854/

Gruss wuf :wink:

Verfasst: Donnerstag 16. April 2009, 19:51
von derdon
Nach 505 Posts zeigst du einem Anfänger ein reines except (das *unter anderen* NameError, KeyboardInterrupt und SyntaxError beinhaltet) als Beispiel? Und warum fangen deine Kommentare immer mit zwei ~ an?

Verfasst: Donnerstag 16. April 2009, 20:02
von numerix
derdon hat geschrieben:Und warum fangen deine Kommentare immer mit zwei ~ an?
Vermutlich verwendet er einen Editor, der per Shortcut diese Art von Kommentaren erzeugt. Bei SciTE sieht das so ähnlich aus. Damit lassen sich einzelne Zeilen/Blöcke sehr schnell (ent-)kommentieren.

Verfasst: Donnerstag 16. April 2009, 20:17
von derdon
Das it ja ein ganz toller Editor :roll:

Verfasst: Donnerstag 16. April 2009, 20:59
von Pascal
erstmal Danke für eure Pots

ich hab aber jetzt wieder das Bild als Label.

Ich würd gerne etwas auf das Bild schreiben, deswegen hätt ich das gerne als Frame.

@wuf:
nettes Bild im except-zweig, aber das ist nicht das Problem, test.gif lässt sich problemlos öffnen.

Verfasst: Donnerstag 16. April 2009, 21:12
von numerix
Pascal hat geschrieben:Ich würd gerne etwas auf das Bild schreiben, deswegen hätt ich das gerne als Frame.
Es wird Zeit, dass du mal in die Doku siehst: http://effbot.org/tkinterbook/tkinter-index.htm

Kurz gesagt: Ein "Bild als Frame" geht nicht. Braucht man auch nicht. Du kannst z.B. ein Label mit Bild versehen oder auch ein Canvas.
Willst du "in" das Bild schreiben, brauchst du die PIL, willst du etwas "über" das Bild schreiben, tut es ein Label auch, weil du Text und Bild übereinander platzieren kannst. Ist das nicht flexibel genug, nimmst du dafür ein Canvas.

In jedem Fall: Lies die Doku!

Verfasst: Donnerstag 16. April 2009, 22:09
von busfahrer
@Pascal
meinst du sowas in der Art

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf8 -*-

import Tkinter as tk
from PIL import Image
from ImageTk import PhotoImage

root = tk.Tk()
im = Image.open("test.gif")
foto = PhotoImage(im)
can = tk.Canvas(root,width=500,height=500)
can.grid()
can.create_image(0,0,anchor=tk.NW,image=foto)
can.create_text(242,20,text="Das ist ein Bild",fill="yellow")

root.mainloop()
Gruß...busfahrer