2015-04-15 11 views
9

W Pythonie 3, I uruchom następujące z interaktywnej powłoki:Jaka jest różnica między klasami TK i Toplevel tkintera?

>>> import tkinter 
>>> type(tkinter.Tk()) 
<class 'tkinter.Tk'> 
>>> type(tkinter.Toplevel()) 
<class 'tkinter.Toplevel'> 

Oba tworzyć poszczególne okna. Zakładam, że tkinter.Tk() zwraca "główne" okno aplikacji tkinter, podczas gdy jakiekolwiek dodatkowe okna powinny być utworzone z tkinter.Toplevel().

Zauważyłem, że jeśli zamkniesz okno tkinter.Tk(), oba okna zostaną zamknięte. Ponadto, jeśli wywołasz tkinter.Toplevel() bez wywoływania tkinter.Tk(), tworzone są dwa okna (jednym z nich jest "główne" okno, które po zamknięciu spowoduje również zamknięcie okna Toplevel).

Czy to jest dokładne? Czy są jakieś inne różnice, którymi powinienem się zajmować?

+0

Na poziomie podstawowym: 'Tk' to cała aplikacja, a' Toplevel' to tylko okno. –

Odpowiedz

10

Twoje podsumowanie jest dokładne. Jedną z podstawowych cech architektury tkintera jest to, że widżety istnieją w hierarchii z dokładnie jednym oknem głównym. To okno główne jest tym, co otrzymujesz, gdy tworzysz instancję Tk.

Tworzenie instancji Tk tworzy więcej niż tworzy okno, inicjuje całą strukturę programu TKKN. W rzeczywistości uruchamia ukryty interpreter tcl, który wykonuje rzeczywistą pracę zarządzania widżetami. Tkinter jest po prostu otoką pytona wokół tego tłumacza.

Jeśli spróbujesz utworzyć inny widget bez jawnego utworzenia okna root, to zostanie on utworzony automatycznie, ponieważ każda aplikacja TKiller musi mieć dokładnie jedno okno główne.

+0

Można dodać, że faktycznie można użyć tego ukrytego interpretera Tcl metodą 'tkinter.Tcl()' bez tworzenia żadnych okien, ale byłby to rzadki widok w krainie Pythona. (to głupi sposób na ominięcie pytona GIL, ponieważ interpreter Tcl nie ma GIL i może wspierać wątki). – schlenk

Powiązane problemy