本篇 ShengYu 介紹 Python tkinter OptionMenu 用法與範例。OptionMenu 下拉式選單通常適用於讓使用者從多個選項中選擇一個的情境,
以下的 Python tkinter OptionMenu 用法與範例將分為這幾部分,
- tkinter OptionMenu 基本用法
- 取得 tkinter OptionMenu 目前選項值
- 當 tkinter OptionMenu 選項改變時的事件通知
OptionMenu 建立時是顯示空白,加入選項的方式如下,將所有選項放到 tk.OptionMenu()
的第三個參數之後,將 tk.StringVar 帶入 tk.OptionMenu()
第二個參數綁訂之後,透過 var.set()
來設定 OptionMenu 預設的選項值,1
2
3
4
5
6
7
8
9
10
11
12
13
14#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
root = tk.Tk()
root.title('my window')
root.geometry('200x150')
var = tk.StringVar()
var.set('apple')
myoptionmenu = tk.OptionMenu(root, var, 'apple','banana','orange')
myoptionmenu.pack(pady=10)
root.mainloop()
結果圖如下,
你也可以將選項先放在 list 裡之後再帶入 tk.OptionMenu()
裡,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
root = tk.Tk()
root.title('my window')
root.geometry('200x150')
optionList = ['apple','banana','orange','lemon','tomato']
var = tk.StringVar()
var.set(optionList[2])
myoptionmenu = tk.OptionMenu(root, var, *optionList)
myoptionmenu.pack(pady=10)
root.mainloop()
結果圖如下,
這邊示範如何按下 button 時取得 OptionMenu 目前選項值,將 tk.StringVar 跟 tk.OptionMenu 綁訂之後,透過 var.get()
來取得 OptionMenu 目前選項值,執行範例時會發現按下 button 時會在 button_event 裡將目前的 myoptionmenu 選項值顯示在 mylabel 的文字上,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
def button_event():
#print(var.get())
mylabel.configure(text='my favourite fruit is ' + var.get())
root = tk.Tk()
root.title('my window')
root.geometry('200x150')
optionList = ['apple','banana','orange','lemon','tomato']
var = tk.StringVar()
var.set(optionList[0])
myoptionmenu = tk.OptionMenu(root, var, *optionList)
myoptionmenu.pack(pady=10)
tk.Button(root, text='button', command=button_event).pack(pady=10)
mylabel = tk.Label(root, text='this is label', height=2, font=('Arial', 12))
mylabel.pack()
root.mainloop()
結果圖如下,
這邊示範當 OptionMenu 選項改變時的事件通知,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
def optionmenu_event(*args):
#print(var.get())
mylabel['text'] = 'my favourite fruit is ' + var.get()
root = tk.Tk()
root.title('my window')
root.geometry('200x150')
optionList = ['apple','banana','orange','lemon','tomato']
var = tk.StringVar()
var.set(optionList[0])
myoptionmenu = tk.OptionMenu(root, var, *optionList)
myoptionmenu.pack(pady=10)
mylabel = tk.Label(root, text='this is label', height=2, font=('Arial', 12))
mylabel.pack()
#var.trace('w', lambda *args: print(var.get()))
var.trace("w", optionmenu_event)
root.mainloop()
結果圖如下,
var.trace_add()
在 ubuntu 16.04 (python3.5.2) 會遇到下列的錯誤,這邊先用 var.trace()
的方式,1
AttributeError: 'StringVar' object has no attribute 'trace_add'
文章內有人提到 python 3.6 已棄用 var.trace()
應該要用 var.trace_add()
來替代。
以上就是 Python tkinter OptionMenu 用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!
其它參考
Getting a value from Tkinter OptionMenu in Python - Stack Overflow
https://stackoverflow.com/questions/46831855/getting-a-value-from-tkinter-optionmenu-in-python