Tkinter 教程 - 選單欄
GUI 中最常見的元素之一是選單欄。選單欄通常位於標題欄下方,以顯示一系列選單。使用者單擊其中一個頂級選單後,將擴充套件一個子選單以顯示更多相關選單項。子選單通常被繫結到特定命令如 open
,close
,save
或 quit
。
Tkinter 基本選單欄
我們將建立一個基本的 Tkinter 選單欄,該例子中具有大多數編輯器中的 File
選單。為了簡單起見,我們僅包含 Open
、Save
和 Quit
子選單。
import tkinter as tk
app = tk.Tk()
app.geometry("300x200")
app.title("Basic Menu Bar")
menubar = tk.Menu(app)
filemenu = tk.Menu(menubar)
filemenu.add_command(label="Open")
filemenu.add_command(label="Save")
filemenu.add_command(label="Exit")
menubar.add_cascade(label="File", menu=filemenu)
app.config(menu=menubar)
app.mainloop()
menubar = tk.Menu(app)
Menu
的給定引數是所建立選單的父視窗控制元件。上面的程式碼行意味著選單控制元件 menubar
將是 app
框架的頂層。
filemenu = tk.Menu(menubar)
同樣,filemenu
是 menubar
控制元件的選單,或 app
的子選單。
filemenu.add_command(label="Open")
add_command
將命令新增到選單 filemenu
。label
是子選單中顯示的文字。
menubar.add_cascade(label="File", menu=filemenu)
使用命令 add_cascade
將 filemenu
新增到 menubar
。File
是顯示在 app
框架頂部的選單標籤。
app.config(menu=menubar)
雖然 menubar
是作為 app
的子控制元件建立的,但你仍然需要配置它成為 app
的 menu
。否則,GUI 中不會顯示任何選單欄。
現在如果你單擊 File
子選單中選項,它根本不會響應,因為還沒有命令附加到它們。我們將在下一個節介紹如何新增命令。
Tkinter 選單欄命令
import tkinter as tk
from tkinter import filedialog
def onOpen():
print(
filedialog.askopenfilename(
initialdir="/",
title="Open file",
filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
)
)
def onSave():
print(
filedialog.asksaveasfilename(
initialdir="/",
title="Save as",
filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
)
)
app = tk.Tk()
app.geometry("300x200")
app.title("Menu Bar Command")
menubar = tk.Menu(app)
filemenu = tk.Menu(menubar, tearoff=0)
filemenu.add_command(label="Open", command=onOpen)
filemenu.add_command(label="Save", command=onSave)
filemenu.add_command(label="Exit", command=app.quit)
menubar.add_cascade(label="File", menu=filemenu)
app.config(menu=menubar)
app.mainloop()
filemenu = tk.Menu(menubar, tearoff=0)
tearoff
設定預設值為 1
,如果單擊頂部的虛線,它將與主視窗分離選單以建立浮動選單。此處設定為 0
,禁用此浮動功能。
filemenu.add_command(label="Open", command=onOpen)
onOpen
函式被繫結到選單 Open
,在單擊 Open
時將被呼叫。
def onOpen():
print(
filedialog.askopenfilename(
initialdir="/",
title="Open file",
filetypes=(("Python files", "*.py;*.pyw"), ("All files", "*.*")),
)
)
此函式顯示開啟的對話方塊並返回所選檔名。在本例中,我們並不是真正開啟檔案,而是列印檔名。
tkfiledialog
具有三個函式
函式 | 引數 | 描述 |
---|---|---|
.askopenfilename |
Directory, Title, Extension | 開啟檔案:對話請求選擇已有檔案 |
.asksaveasfilename |
Directory, Title, Extension | 儲存檔案:對話方塊請求建立或替換的檔案 |
.askdirectory |
None | 開啟目錄 |
filemenu.add_command(label="Exit", command=app.quit)
Tkinter 具有退出 GUI 的內部函式 quit
。我們可以簡單地將此函式繫結到 Exit
而不用再建立我們自己的 exit
函式。