Bild einfügen mit Tkinter

Fragen zu Tkinter.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

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
Zuletzt geändert von Pascal am Mittwoch 27. Mai 2009, 18:44, insgesamt 1-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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 ;-)
Das Leben ist wie ein Tennisball.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

ohh ja ich habe das falsche Unterforum getrffen :s

na ja hier gehört es ja eigentlich hin
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

http://www.python-forum.de/topic-3133.html

das ganze gab´s ja schonmal, aber bei mir geht´s nicht
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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:
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

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
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

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
Alles wird gut ;-)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

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?
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

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.
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

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...
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

"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).
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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:
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo Pascal

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

Gruss wuf :wink:
Zuletzt geändert von wuf am Donnerstag 16. April 2009, 22:20, insgesamt 1-mal geändert.
Take it easy Mates!
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Das it ja ein ganz toller Editor :roll:
Pascal
User
Beiträge: 271
Registriert: Samstag 4. April 2009, 22:18

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.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

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!
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

@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
Alles wird gut ;-)
Antworten