Image auf Button in Klasse

Fragen zu Tkinter.
Antworten
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi!

Wieder mal ein kryptischer Titel :) Hier der Code:

Code: Alles auswählen

from Tkinter import *

class Test(Frame):
    def __init__(self,master):
        Frame.__init__(self,master,bd=2,relief=GROOVE)
        icon='''\
R0lGODlhCgALAIABAAAAAP///yH5BAEKAAEALAAAAAAKAAsAAAIURI4Im7qcnnTyhYqzyRTSdhjg
UQAAOw==
'''
        im_open = PhotoImage(data=icon)
        Button(self,image=im_open).pack()

root = Tk()
Test(root).pack()
root.mainloop()
Das Problem: Das Icon am Button wird nicht angezeigt. Warum? Wenn ich im_open ausserhalb der Klasse erstelle, funktionierts. Warum? Kann mir das jemand erklären, ich muss nämlich gleich weinen :cry:

Gruß, mawe
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Speicher mal im_open in der Klasse (self.im_open) dann funktioniert. Anscheinend merkt Python nicht, dass es noch eine Referenz vom Image im Tk gibt.

Gruss Rayo

PS: hast eigentlich noch Interesse am tkDesigner? :) Hab den noch, wäre fast schade 1,5k Zeilen einfach so zu verrotten lassen. Das einzige warum ich nicht weiter bin ist das Speichern/Laden/Exportieren, hab mich dazu entschieden dass noch wegzulassen und alles rundum zu machen. Vielleicht findet sich ja jemand, der es macht :D
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Hi rayo!

Vielen Dank, so funktionierts!

Zum tkDesigner: Interesse hab ich natürlich noch, aber mit der Zeit siehts halt etwas schlecht aus. Hast Du den aktuellen Code noch irgendwo im Netz, dann schau ich's mir wieder mal an.

Gruß, mawe
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Also der Code bringts noch nicht zum durschauen, ist noch zu unübersichtlich. Ist alles in einem File :D. Muss mal ein wenig trennen und ein paar Kommentare hinzufügen, dann kann ichs online stellen.

Kannst dir ja schonmal überlegen wie du einen Baum am einfachsten speichern und laden kannst. (Alle Options/PackInfos werden gespeichert, den Klassenname usw.)

Für jedes Widget hab ich eine extra Klasse die von cWidget (Grundklasse für ein Widget zum anzeigen) abgeleitet ist. Somit kann ich auch für spezielle Widgets zusätzliche Sachen speichern.

Gruss
Antworten