天天看點

tkinter:Toplevel一、概述二、代碼三、解釋四、舉一反三五、總結與反思六、對Toplevel參數了解參考如下

一、概述

Toplevel 元件可以提供單獨的容器。

二、代碼

import tkinter as tk

# 主頂層
win = tk.Tk()
win.title("主視窗")
win.geometry("400x200")
tk.Label(win, text="Toplevel-主視窗").pack(pady=20)


# 子頂層1 依賴于主視窗;如果主視窗關閉,子頂層也被關閉
w1 = tk.Toplevel(win)
w1.title("w1 in win")
w1.geometry("300x150")
tk.Label(w1, text="子視窗1依托于主視窗").pack(padx=20, pady=20)

# 子視窗2 臨時頂層,畫于主視窗頂部,如果主視窗圖示最小化,子頂層最小化
w2 = tk.Toplevel(win)
w2.title("w2 in win")
w2.geometry("300x150")
tk.Label(w2, text="子視窗2依托于主視窗").pack(padx=20, pady=20)
w2.transient(win)


# 子視窗3
w3 = tk.Toplevel(win, borderwidth=5, bg='lightyellow')
tk.Label(w3, text='沒有裝飾的視窗', bg='red', fg='white').pack(padx=20, pady=20)
w3.overrideredirect(True)
w3.geometry('200x80+200+200')

win.mainloop()
           

效果

tkinter:Toplevel一、概述二、代碼三、解釋四、舉一反三五、總結與反思六、對Toplevel參數了解參考如下

三、解釋

  1. 根視窗:建立GUI必須使用的

    win=tkinter.Tk()

    建立
  2. 子視窗1:

    win1 = tkinter.Toplevel(win)

    表明

    win1

    依托于

    win

  3. 子視窗2:

    win2 = tkinter.Toplevel(win)

    ,同時,

    win2.transient(win)

    子視窗2與根視窗綁定,跟視窗最小化,子視窗2最小化,并且總顯示在根視窗最前面。
  4. 子視窗3:

    win3=tkinter.Toplevel(win)

    win3.overrideredirect(True)

    建立的視窗不能被縮放或拖動

四、舉一反三

代碼:

import tkinter as tk

# 主頂層
win = tk.Tk()
win.title("主視窗")
win.geometry("400x200")
tk.Label(win, text="Toplevel-主視窗").pack(pady=20)

# 子頂層1 依賴于主視窗;如果主視窗關閉,子頂層也被關閉
w1 = tk.Toplevel()
w1.title("w1 in win")
w1.geometry("300x150+300+300")
tk.Label(w1, text="子視窗1依托于主視窗").pack(padx=20, pady=20)
w1.withdraw()

# 子視窗2 臨時頂層,畫于主視窗頂部,如果主視窗圖示最小化,子頂層最小化
w2 = tk.Toplevel()
w2.title("w2 in win")
w2.geometry("300x150+300+300")
tk.Label(w2, text="子視窗2依托于主視窗").pack(padx=20, pady=20)
# w2.transient(win)
w2.withdraw()

# 子視窗3
w3 = tk.Toplevel(borderwidth=5, bg='lightyellow')
w3.geometry('200x80+300+300')
w3.overrideredirect(True)
tk.Label(w3, text='沒有裝飾的視窗', bg='red', fg='white').pack(padx=20, pady=20)
w3.withdraw()

frame = tk.Frame(win)
frame.pack()
btn1 = tk.Button(frame, text="子視窗1", command=lambda : w1.deiconify())
btn1.pack(side="left", padx=5)
btn2 = tk.Button(frame, text="子視窗2", command=lambda : w2.deiconify())
btn2.pack(side="left", padx=5)
btn3 = tk.Button(frame, text="子視窗3", command=lambda : w3.deiconify())
btn3.pack(side="left", padx=5)

win.mainloop()
           

效果

tkinter:Toplevel一、概述二、代碼三、解釋四、舉一反三五、總結與反思六、對Toplevel參數了解參考如下

五、總結與反思

tkinter.toplevel()

可以建立新的頂層容器,拓展了我們開發GUI更多的功能。學習的過程多調試,掌握每種頂層視窗的作用,在學習的過程,我們可以把簡單的功能分别設計到各自的子視窗中,簡化我們開發的難度,以及簡化視窗布局的難度。

難點:

w3.overrideredirect(True)
w2.transient(win)
           

對上述代碼的了解,多調試。

六、對Toplevel參數了解參考如下

  1. TKINTER TOPLEVEL
  2. Tkinter 之TopLevel頂級視窗
  3. Tkinter 元件詳解(十九):Toplevel
  4. Tk(根視窗)和 Toplevel(頂級視窗)的方法彙總