Hallo Pascal
Bei mir tritt die von dir festgestellte Exception nicht auf. Das PhotoImage-Objekt wird aber auf der Schaltfläche nicht angezeigt. Es ist bekannt, dass ein PhotoImage-Objekt unter Umständen seine Referenz verlieren kann. Folgend einige Snippets welche dies veranschaulichen:
PhotoImage-Objekt in einer Funktion erzeugt
Referenz
geht verloren:
Code: Alles auswählen
# Skriptname: photoimage_problem_01.py (wuf)
import Tkinter as tk
def function():
button_image = tk.PhotoImage(data=TK_SYMBOL)
button = tk.Button(app_win, image=button_image)
button.pack(pady=10)
app_win = tk.Tk()
app_win.geometry("100x40+20+20")
TK_SYMBOL ="""R0lGODlhDgALAID/AP8AAMDAwCH5BAEAAAEALAAA
AAAOAAsAQAIfDI4Qu8pukJmvJtgazppyBkbX8ZChY57ohJmJl6JKAQ
A7GhQAOzu6CkQUAAA7Ow=="""
function()
app_win.mainloop()
PhotoImage-Objekt global und nicht in einer Funktion erzeugt.
Referenz
geht nicht verloren:
Code: Alles auswählen
# Skriptname: photoimage_problem_02.py (wuf)
import Tkinter as tk
def function():
button = tk.Button(app_win, image=button_image)
button.pack(pady=10)
app_win = tk.Tk()
app_win.geometry("100x40+20+20")
TK_SYMBOL ="""R0lGODlhDgALAID/AP8AAMDAwCH5BAEAAAEALAAA
AAAOAAsAQAIfDI4Qu8pukJmvJtgazppyBkbX8ZChY57ohJmJl6JKAQ
A7GhQAOzu6CkQUAAA7Ow=="""
button_image = tk.PhotoImage(data=TK_SYMBOL)
function()
app_win.mainloop()
PhotoImage-Objekt in einer Klasse erzeugt aber nicht an die Klasse gebunden.
Referenz
geht verloren:
Code: Alles auswählen
# Skriptname: photoimage_problem_03.py (wuf)
import Tkinter as tk
class MyClass():
def __init__(self):
button_image = tk.PhotoImage(data=TK_SYMBOL)
button = tk.Button(app_win, image=button_image)
button.pack(pady=10)
app_win = tk.Tk()
app_win.geometry("100x40+20+20")
TK_SYMBOL ="""R0lGODlhDgALAID/AP8AAMDAwCH5BAEAAAEALAAA
AAAOAAsAQAIfDI4Qu8pukJmvJtgazppyBkbX8ZChY57ohJmJl6JKAQ
A7GhQAOzu6CkQUAAA7Ow=="""
my_class = MyClass()
app_win.mainloop()
PhotoImage-Objekt in einer Klasse erzeugt aber mit self an die Klasse gebunden.
Referenz
geht nicht verloren:
Code: Alles auswählen
# Skriptname: photoimage_problem_04.py (wuf)
import Tkinter as tk
class MyClass():
def __init__(self):
self.button_image = tk.PhotoImage(data=TK_SYMBOL)
button = tk.Button(app_win, image=self.button_image)
button.pack(pady=10)
app_win = tk.Tk()
app_win.geometry("100x40+20+20")
TK_SYMBOL ="""R0lGODlhDgALAID/AP8AAMDAwCH5BAEAAAEALAAA
AAAOAAsAQAIfDI4Qu8pukJmvJtgazppyBkbX8ZChY57ohJmJl6JKAQ
A7GhQAOzu6CkQUAAA7Ow=="""
my_class = MyClass()
app_win.mainloop()
Für dieses Phänomen hat BlackJack einmal eine treffende Antwort geschrieben:
http://www.python-forum.de/post-110476.html#110476
Gruss wuf
