Bild für einen Button wird nicht gefunden

Fragen zu Tkinter.
Antworten
piepstachel
User
Beiträge: 13
Registriert: Mittwoch 9. Juni 2004, 10:18
Wohnort: 06463 Reinstedt

Hallo Leute,

ich habe ein sehr mysteriöses Phänomen:
Ich möchte einen Button (später auch mehrere...) mit enstsprechenden Grafiken versehen in einem Fenster darstellen. Das unten genannte Testprogramm hat auch schon einmal funktioniert. Aus einem Grund, den ich nicht nachvollziehen kann, funktioniert es nun nicht mehr. Die benötigte Grafik befindet sich im gleichen Verzeichnis!

Code: Alles auswählen

import Tkinter
from Tkconstants import *

tk=Tkinter.Tk()
tk.title("Test")
frame=Tkinter.Frame(tk, bd=2)
frame.grid(row=0, column=0)

image1=Tkinter.PhotoImage(file='browsen_trans.gif')
button1=Tkinter.Button(frame, image=image1, command=tk.destroy)
button1.grid(row=0, column=0)

Tkinter.mainloop()
Als Meldung erhalte ich folgendes:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Python23\lib\site-packages\Pythonwin\pywin\framework\scriptutils.py", line 310, in RunScript
    exec codeObject in __main__.__dict__
  File "D:\Programmierung\Python\test.py", line 10, in ?
    button1=Tkinter.Button(frame, image=image1, command=tk.destroy)
  File "C:\Python23\lib\lib-tk\Tkinter.py", line 1906, in __init__
    Widget.__init__(self, master, 'button', cnf, kw)
  File "C:\Python23\lib\lib-tk\Tkinter.py", line 1835, in __init__
    self.tk.call(
TclError: image "pyimage7" doesn't exist
Unter Umständen, die ich ebenfalls nicht kenne, wurde in der letzten Zeile der Fehlermeldung der Dateiname auch schon im Klartext genannt. Jetzt weiß ich nicht mehr, wo ich noch suchen soll.

Vielleicht kann mir ja jemand helfen.

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

Gib mal in dem String den kompletten Pfad an (Raw-String). Ich glaube PythonWin hat bei dir das CWD geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
piepstachel
User
Beiträge: 13
Registriert: Mittwoch 9. Juni 2004, 10:18
Wohnort: 06463 Reinstedt

Hallo Leonidas,

was meinst Du mit "Raw-String"?
Ich habe nämlich den kompletten Pfad ausprobiert (D:\Python\....) und erhalte auch einen Fehler.

Gruß piepstachel
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Man erzeugt einen Raw-String indem man ein kleines r davor setzt.

Code: Alles auswählen

>>> pfad = r"D:\MyFiles\test"
>>> print pfad
D:\MyFiles\test
>>> pfad
'D:\\MyFiles\\test'
>>>
das vermiedet evtl Probleme mit Steuerzeichen
Gast

Nach einigen Fehlversuchen hat es nun endlich geklappt (mit relativer sowie mit absoluter Pfadangabe):

Code: Alles auswählen

import Tkinter
from Tkconstants import *

tk=Tkinter.Tk()
tk.title("Test")
frame=Tkinter.Frame(tk, bd=2)
frame.grid(row=0, column=0)

image1=Tkinter.PhotoImage(file=r'D:\Programmierung\Python\PhotoMerger\browsen_trans.gif')
button1=Tkinter.Button(frame, image=image1, command=tk.destroy)
button1.grid(row=0, column=0)

Tkinter.mainloop()
Habt vielen Dank für die schnelle Hilfe.

piepstachel
piepstachel
User
Beiträge: 13
Registriert: Mittwoch 9. Juni 2004, 10:18
Wohnort: 06463 Reinstedt

Entschuldigung, ich war nicht eingeloggt.
Nochmals vielen Dank!

piepstachel
piepstachel
User
Beiträge: 13
Registriert: Mittwoch 9. Juni 2004, 10:18
Wohnort: 06463 Reinstedt

Hallo Leute,

ich möchte ja nicht nerven, aber nachdem ich den 5. oder 6. Button einfügen wollte, hatte ich das gleiche Problem wieder. Er findet keine Grafiken, auch die nicht, die vorher funktionierten.
Ich vermute, das sich irgendetwas in der Konfiguration verstellt hat - ich weiß nur nicht was!

Vielleicht hat ja jemand einen Einfall.

Gruß piepstachel
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi piepstachel,

wenn das Bild im gleichen Verzeichnis wie das Script liegt, sollte folgendes funktionieren.

Code: Alles auswählen

import Tkinter
from Tkconstants import *

import os

tk=Tkinter.Tk()
tk.title("Test")
frame=Tkinter.Frame(tk, bd=2)
frame.grid(row=0, column=0)

img_path = os.path.join(os.path.dirname(__file__),"browsen_trans.gif")
image1=Tkinter.PhotoImage(file=img_path)
button1=Tkinter.Button(frame, image=image1, command=tk.destroy)
button1.grid(row=0, column=0)

Tkinter.mainloop()
Gruß

Dookie
[code]#!/usr/bin/env python
import this[/code]
piepstachel
User
Beiträge: 13
Registriert: Mittwoch 9. Juni 2004, 10:18
Wohnort: 06463 Reinstedt

Hallo Dookie,

ich habe Deinen Vorschlag einaml getestet und erhalte folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Python23\lib\site-packages\Pythonwin\pywin\framework\scriptutils.py", line 310, in RunScript
    exec codeObject in __main__.__dict__
  File "D:\Programmierung\Python\PhotoMerger\test.py", line 11, in ?
    img_path = os.path.join(os.path.dirname(__file__),"browsen_trans.gif")
NameError: name '__file__' is not defined
Nun bin ich ziemlich ratlos.

Gruß piepstachel
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

und so:

Code: Alles auswählen

import Tkinter
from Tkconstants import *

import os
import sys

tk=Tkinter.Tk()
tk.title("Test")
frame=Tkinter.Frame(tk, bd=2)
frame.grid(row=0, column=0)

img_path = os.path.join(os.path.dirname(sys.argv[0]),"browsen_trans.gif")
print img_path # nur zum debuggen
image1=Tkinter.PhotoImage(file=img_path)
button1=Tkinter.Button(frame, image=image1, command=tk.destroy)
button1.grid(row=0, column=0)

Tkinter.mainloop()
Dookie
[code]#!/usr/bin/env python
import this[/code]
piepstachel
User
Beiträge: 13
Registriert: Mittwoch 9. Juni 2004, 10:18
Wohnort: 06463 Reinstedt

Hallo Dookie,

Danke ... mit diesem Tip hats geklappt - solange bis ich im Quelltext eine nicht vorhanden Grafik angesprochen habe - Dann ging es wieder nicht mehr.
Ich habe PythonWin neu gestartet und dann ging es wieder. (Der Neustart ist aber auch keine Garantie für ein Funtionieren danach!)
Habe ich irgendwie ein generelles Problem?

piepstachel
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

hallo zusammen, habe den ganzen thread nun
nicht gelesen, aber dein problem wohl. ich hatte vor ca 3 monaten
genau das gleiche problem. ich wollte auf buttons kleine bilder
legen. dies ging ebenfalls nicht. nachdem ich ewig geforscht hatte,
fand ich heraus, das dies ein problem von tkinter war. ein bug also.
scheint so, als wurde das noch nichts gefixed. ich habe es jedenfalls
aufgegeben mit den images :)
falls doch jmd es irgendwie schafft, das problem zu lösen würde ich
mich ebenfalls freuen :)
Antworten