Seite 1 von 1

Image auf Button in Klasse

Verfasst: Freitag 11. März 2005, 09:06
von mawe
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

Verfasst: Freitag 11. März 2005, 11:26
von rayo
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

Verfasst: Freitag 11. März 2005, 11:38
von mawe
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

Verfasst: Freitag 11. März 2005, 11:52
von rayo
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