2025年3月7日 星期五

Tkinter 選單範例

 這是一個 Tkinter Menu 的完整範例,展示如何建立選單,包括 主選單、下拉選單、子選單、分隔線、快捷鍵,以及 "關於" 對話框


完整 Tkinter 選單範例

import tkinter as tk
from tkinter import messagebox

# 創建主視窗
root = tk.Tk()
root.title("Tkinter Menu 範例")
root.geometry("400x300")

# 創建主選單
menu_bar = tk.Menu(root)

# **檔案 (File) 選單**
file_menu = tk.Menu(menu_bar, tearoff=0)
file_menu.add_command(label="開啟 (Ctrl+O)", command=lambda: messagebox.showinfo("開啟", "開啟檔案"))
file_menu.add_command(label="儲存 (Ctrl+S)", command=lambda: messagebox.showinfo("儲存", "儲存檔案"))
file_menu.add_separator()
file_menu.add_command(label="離開 (Ctrl+Q)", command=root.quit)  # 離開應用程式

menu_bar.add_cascade(label="檔案 (File)", menu=file_menu)

# **編輯 (Edit) 選單**
edit_menu = tk.Menu(menu_bar, tearoff=0)
edit_menu.add_command(label="剪下 (Ctrl+X)", command=lambda: messagebox.showinfo("剪下", "剪下文字"))
edit_menu.add_command(label="複製 (Ctrl+C)", command=lambda: messagebox.showinfo("複製", "複製文字"))
edit_menu.add_command(label="貼上 (Ctrl+V)", command=lambda: messagebox.showinfo("貼上", "貼上文字"))

menu_bar.add_cascade(label="編輯 (Edit)", menu=edit_menu)

# **說明 (Help) 選單**
help_menu = tk.Menu(menu_bar, tearoff=0)
help_menu.add_command(label="關於 (About)", command=lambda: messagebox.showinfo("關於", "這是一個 Tkinter 範例"))
menu_bar.add_cascade(label="說明 (Help)", menu=help_menu)

# **設定主選單**
root.config(menu=menu_bar)

# **鍵盤快捷鍵 (熱鍵)**
root.bind("<Control-o>", lambda event: messagebox.showinfo("開啟", "快捷鍵 - 開啟檔案"))
root.bind("<Control-s>", lambda event: messagebox.showinfo("儲存", "快捷鍵 - 儲存檔案"))
root.bind("<Control-q>", lambda event: root.quit)

# 執行主視窗
root.mainloop()

功能解釋

1️⃣ 主選單 menu_bar

  • menu_bar = tk.Menu(root):創建主選單。
  • root.config(menu=menu_bar):將選單設定到視窗。

2️⃣ File (檔案) 選單

  • file_menu = tk.Menu(menu_bar, tearoff=0):創建子選單,tearoff=0 禁用分離選單。
  • add_command(label="開啟", command=...):添加功能選項。
  • add_separator():添加分隔線。
  • file_menu.add_command(label="離開", command=root.quit):點擊後關閉應用程式。

3️⃣ Edit (編輯) 選單

  • 包含 剪下複製貼上 功能。

4️⃣ Help (說明) 選單

  • 包含 "關於",點擊後顯示 messagebox.showinfo()

5️⃣ 鍵盤快捷鍵

  • root.bind("<Control-o>", lambda event: ...) 綁定 Ctrl+O 快捷鍵。
  • root.bind("<Control-s>", lambda event: ...) 綁定 Ctrl+S 快捷鍵。
  • root.bind("<Control-q>", lambda event: root.quit) 綁定 Ctrl+Q 快速退出程式。

額外擴展

你可以加入更多 子選單,例如:

submenu = tk.Menu(file_menu, tearoff=0)
submenu.add_command(label="最近開啟的檔案 1")
submenu.add_command(label="最近開啟的檔案 2")
file_menu.add_cascade(label="最近開啟", menu=submenu)

這樣 File 選單中會有一個 "最近開啟"子選單



沒有留言:

張貼留言