Anwendung von __dict__[]

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Tut es auch nicht, aber dem Toplevel-Widget interessiert das sehr.

Und tut mir leid das so sagen zu müssen, aber dein Programm da oben entbehrt sich mir jeder Logik, du hast sowohl die OOP umgangen als auch die grundlegenden Struckturen von Tk. Du solltest dringend mal in das Tkinter-Unterforum oder auf effbot.org dir ansehen wie man mit Tkinter arbeitet. Ich wüsste jetzt gar nicht wo ich anfangen soll.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
BlackJack

@hypnoticum: Es muss nicht das "Masterfenster" sein sondern halt irgend ein Objekt das auch bestehen bleibt. Dein `ConfigDia`-Objekt wird ja erstellt, aber da nirgends eine Referenz drauf gehalten wird, kann es auch sofort nachdem die `__init__()` fertig ist, wieder aus dem Speicher beseitigt werden. Und damit auch alle Attribute des Objekts.

Edit: Insofern ist es schon fast Zufall dass das `Toplevel` überhaupt dauerhaft angezeigt wird und nicht verschwindet. Selbst auf Tk-Seite ist es nicht explizit mit irgendeinem "Objekt" verbunden, weil Du beim erstellen vom `Toplevel` kein Eltern-Widget angibst. Das sollte man besser tun, sonst kann es dadurch auch zu komischen Effekten kommen.
hypnoticum
User
Beiträge: 132
Registriert: Dienstag 15. März 2011, 15:43

@Xynon1:
Tut mir leid, dass ich keine Zeit dafür habe mich da einzuarbeiten.
Ich muss es learning on the fly versuchen.
ICH BIN WEDER PROGRAMMIERER, NOCH INFORMATIKER.
Bisher konnte ich mir in MSVS meine GUI zusammenklicken.
Auch mit OOP hatte ich wenig Kontakt, hatte halt immer nur kleine Probleme ohne wirklich nötige Projektstruktur.
Ich kann nicht erst zu jedem Thema ein Buch was lesen bevor ich anfange. Ein Buch zu Python habe ich überflogen, aber bekanntlich steht in keinem Buch alles.

@BlackJack:
Also darum kann ich nun dem Toplevel-Widget zB. ein Attribut des master-Fensters bekannt machen, obwohl es in einem ganz anderen Dialog "hängt", das hilft mir weiter.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Diese Art von "learning on the fly" endet aber immer gleich man stürzt ab. Versuch es mal so:

Code: Alles auswählen

import Tkinter as tk
import tkSimpleDialog

class TestGUI(tk.Frame):
    
    def __init__(self, master, **kwargs):
        tk.Frame.__init__(self, master, kwargs) 
        self.init_widgets()

    def get_config(self):
        config = ConfigDia(self)
        print dir(config)
        print config.eins
        
    def init_widgets(self):
        btn = tk.Button(self, text="Configure", command=self.get_config)
        btn.pack()


class ConfigDia(tkSimpleDialog.Dialog):

    def body(self, master):
        test_dict = {'eins': '1', 'zwei': '0'}
        for i, (name, value) in enumerate(test_dict.iteritems()):
            int_var = tk.IntVar()
            int_var.set(int(value))
            setattr(self, name, int_var)
            # Edit: self zu master gemacht 
            checkbutton = tk.Checkbutton(master, text=name, variable=int_var)
            checkbutton.pack()
            

if __name__ == "__main__":
    root = tk.Tk()

    test = TestGUI(root)
    test.pack()

    root.mainloop()
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten