五筆打字通主頁
在tkinter中,在同一模塊下,如果不是通過frame或notebook來模擬多窗體切換,那就只有通過 Toplevel組件來操作了。
通過Toplevel組件可以彈出一個窗體,這個窗體跟主窗體一樣,可以設置標題,大小,圖標,位置,顏色等,也可以在這個彈出窗體加入新的組件,也可以把這個彈出窗體做為父窗體,再彈出新的窗體。
但是,但是,但是,(重要的事說3次),除了第一個所謂的主窗體外,其它彈出的所謂的子窗體,以及子子窗體,都是兄弟關系,平行關系。
你可以關閉主窗體,讓所有窗體都跟隨關閉。其它窗體只能關閉自己。 丶丌皛
我們可以通過主窗體切換到某個彈出窗體,也可以通過其中一個彈出窗體再彈出另外一個彈出窗體,也可以彈出自己的子窗體,除主窗體外,它們都是平行關系,兄弟關系。
下面的代碼,我來演示一下Toplevel組件彈出窗體的幾種情況:
from tkinter import * def one(): top1=Toplevel(root) top1.title('彈出的第1個窗口') top1.geometry('300x100') but0=Button(top1,text="我也可以彈出第2個窗體",command=two) but0.pack() but3=Button(top1,text="我也可以彈出我下面的子窗體",command=wb98) but3.pack() def two(): top2=Toplevel(root) top2.title('第2個窗口,置頂所有窗體') top2.attributes('-topmost',1) # 窗口置頂其它窗體之上 top2.geometry('300x100') def three(): top3=Toplevel(root) top3.title('第3個窗口,只置頂root窗體') top3.transient(root) # 窗口只置頂root之上 top3.geometry('300x100') def four(): top4=Toplevel(root) top4.title('第4個窗口,模式窗體') top4.attributes("-toolwindow", 1) # 無最大化,最小化 top4.transient(root) # 窗口只置頂root之上 top4.resizable(False,False) # 不可調節窗體大小 top4.grab_set() # 轉化模式 top4.focus_force() # 得到焦點 top4.geometry('300x80') la1=Label(top4,text='注意:只要關閉本窗體,才可以操作其它窗體',bg='lightblue') la1.pack() def wb98(): top21=Toplevel(root) top21.title('第2個窗口的子窗體') top21.transient(root) # 窗口只置頂root之上 top21.geometry('100x100') root=Tk() # 源碼來自wb98.com root.title('所謂的主窗口') root.geometry('300x200') but1=Button(root,text="彈出第1個窗體",command=one) # 彈出第1個普通窗體 but1.pack() but2=Button(root,text="彈出第2個窗體",command=two) # 彈出第2個窗體,置頂所有窗體 but2.pack() but2=Button(root,text="彈出第3個窗體",command=three) # 彈出第3個窗體,root主窗體 but2.pack() but2=Button(root,text="彈出第4個窗體",command=four) # 彈出第4個窗體,模式窗體 but2.pack() root.mainloop()
運行結果:
我們可以通過Toplevel組件做新的窗體,其實也通過Toplevel組件來模擬自定義的對話框,如上面代碼,彈出的第4個置頂,無最大化,最小化按鈕的窗體,就可以改成對話框,在我前面的文章也有相關的代碼,大家可以回看。
此文章來自:wb98.com 網站還有相關的系列課程文章,感興趣的可以前往。
來源:濟亨網
本文鏈接:http://www.chinaengraver.com/post/354.html