Tkinter 教程 - 選單欄

Jinku Hu 2023年1月30日 2019年12月7日
  1. Tkinter 基本選單欄
  2. Tkinter 選單欄命令
Tkinter 教程 - 選單欄

GUI 中最常見的元素之一是選單欄。選單欄通常位於標題欄下方,以顯示一系列選單。使用者單擊其中一個頂級選單後,將擴充套件一個子選單以顯示更多相關選單項。子選單通常被繫結到特定命令如 openclosesavequit

Tkinter 基本選單欄

我們將建立一個基本的 Tkinter 選單欄,該例子中具有大多數編輯器中的 File 選單。為了簡單起見,我們僅包含 OpenSaveQuit 子選單。

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()

Tkinter Menubar Basic

menubar = tk.Menu(app)

Menu 的給定引數是所建立選單的父視窗控制元件。上面的程式碼行意味著選單控制元件 menubar 將是 app 框架的頂層。

filemenu = tk.Menu(menubar)

同樣,filemenumenubar 控制元件的選單,或 app 的子選單。

filemenu.add_command(label="Open")

add_command 將命令新增到選單 filemenulabel 是子選單中顯示的文字。

menubar.add_cascade(label="File", menu=filemenu)

使用命令 add_cascadefilemenu 新增到 menubarFile 是顯示在 app 框架頂部的選單標籤。

app.config(menu=menubar)

雖然 menubar 是作為 app 的子控制元件建立的,但你仍然需要配置它成為 appmenu。否則,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 函式。

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn