Bild für einen Button wird nicht gefunden

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

Bild für einen Button wird nicht gefunden

Beitragvon piepstachel » Mittwoch 9. Februar 2005, 10:27

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 9. Februar 2005, 13:05

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 Modvoice
piepstachel
User
Beiträge: 13
Registriert: Mittwoch 9. Juni 2004, 10:18
Wohnort: 06463 Reinstedt

Beitragvon piepstachel » Mittwoch 9. Februar 2005, 13:18

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: 256
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Beitragvon XT@ngel » Mittwoch 9. Februar 2005, 14:55

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

Beitragvon Gast » Donnerstag 10. Februar 2005, 11:07

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

Beitragvon piepstachel » Donnerstag 10. Februar 2005, 11:09

Entschuldigung, ich war nicht eingeloggt.
Nochmals vielen Dank!

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

Beitragvon piepstachel » Donnerstag 10. Februar 2005, 13:44

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
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Donnerstag 10. Februar 2005, 13:54

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: Alles auswählen

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

Beitragvon piepstachel » Donnerstag 10. Februar 2005, 15:00

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
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Donnerstag 10. Februar 2005, 15:21

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: Alles auswählen

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

Beitragvon piepstachel » Donnerstag 10. Februar 2005, 15:40

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

Beitragvon pr0stAta » Donnerstag 10. Februar 2005, 15:46

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 :)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder