Wie kann man in einem Dict nach einem tk.Toplevel() suchen?

Fragen zu Tkinter.
Antworten
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

hi
in meinem dict:

Code: Alles auswählen

        self.widget_dict = {'WÄHLEN': [self.frm_waehlen],
                        'ERSTELLEN': [self.frm_inside, self.tpl_outside],
                        'SPEICHERN': [self.frm_speichern]}
ist self.tpl_outside ein tk.Toplevel(.....), alle anderen sind tk.Frame(...)'s.
wie kann ich in einem loop:

Code: Alles auswählen

        for text, widget in self.widget_dict.items():
            for frame in widget:
                # print(type(frame))
                if type(frame) == "<class 'tkinter.Toplevel'>":
                    print("yes")
                else:
                    print("no")
nach dem typ: Toplevel suchen?
Benutzeravatar
peterpy
User
Beiträge: 188
Registriert: Donnerstag 7. März 2013, 11:35

Hallo DMD-OS
schau mal hier https://anzeljg.github.io/rin2/book2/24 ... ersal.html
im Kapitel 26. Universal widget methods da findest Du die W.winfo... Methoden
Gruss
Peter
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mit type oder besser isinstance :

Code: Alles auswählen

 if isinstance(thing, tk.TopLevel) 
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@DMD-OS: Du solltest Dir die Frage stellen, warum tpl_outside ein TopLevel ist und die anderen Frames und warum Du das nicht vereinheitlichen kannst. Warum brauchst Du die Fallunterscheidung?
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

weil self.frm_inside und self.tpl_outside dieselbe sache darstellen, die ich aber hin- und herschalten können will.
in beiden sind buttons drin. self.frm_inside ist als frame eingebaut, self.tpl_outside stellt die buttons als positionsveränderbares toplevel dar :)
@__deets__: THANKS, "isinstance" hab ich nicht mehr im auge gehabt. :)
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Wie willst Du denn zwischen einem Frame und einem Top-Level hin und herschalten können?
Warum kannst Du nicht einfach einen Frame in Dein Top-Level packen?
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

Nein, so:
Frame:
Bild
Toplevel:
Bild
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

Das beantwortet noch nicht die Frage, warum Du überhaupt eine Unterscheidung brauchst. Was machst Du konkret anders, wenn Du einen Frame hast, als wenn Du ein TopLevel hast?
Antworten