Seite 1 von 1

Bild für einen Button wird nicht gefunden

Verfasst: Mittwoch 9. Februar 2005, 10:27
von piepstachel
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

Verfasst: Mittwoch 9. Februar 2005, 13:05
von Leonidas
Gib mal in dem String den kompletten Pfad an (Raw-String). Ich glaube PythonWin hat bei dir das CWD geändert.

Verfasst: Mittwoch 9. Februar 2005, 13:18
von piepstachel
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

Verfasst: Mittwoch 9. Februar 2005, 14:55
von XT@ngel
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

Verfasst: Donnerstag 10. Februar 2005, 11:07
von 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

Verfasst: Donnerstag 10. Februar 2005, 11:09
von piepstachel
Entschuldigung, ich war nicht eingeloggt.
Nochmals vielen Dank!

piepstachel

Verfasst: Donnerstag 10. Februar 2005, 13:44
von piepstachel
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

Verfasst: Donnerstag 10. Februar 2005, 13:54
von Dookie
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

Verfasst: Donnerstag 10. Februar 2005, 15:00
von piepstachel
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

Verfasst: Donnerstag 10. Februar 2005, 15:21
von Dookie
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

Verfasst: Donnerstag 10. Februar 2005, 15:40
von piepstachel
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

Verfasst: Donnerstag 10. Februar 2005, 15:46
von pr0stAta
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 :)