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.
Anwendung von __dict__[]
@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.
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.
-
- 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.
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.
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()