Tkinter 教程 - 選單欄

Jinku Hu 2023年1月30日
  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 函式。

作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook