Python tkinter OptionMenu 用法與範例

本篇 ShengYu 介紹 Python tkinter OptionMenu 用法與範例。OptionMenu 下拉式選單通常適用於讓使用者從多個選項中選擇一個的情境,

以下的 Python tkinter OptionMenu 用法與範例將分為這幾部分,

  • tkinter OptionMenu 基本用法
  • 取得 tkinter OptionMenu 目前選項值
  • 當 tkinter OptionMenu 選項改變時的事件通知

tkinter OptionMenu 基本用法

OptionMenu 建立時是顯示空白,加入選項的方式如下,將所有選項放到 tk.OptionMenu() 的第三個參數之後,將 tk.StringVar 帶入 tk.OptionMenu() 第二個參數綁訂之後,透過 var.set() 來設定 OptionMenu 預設的選項值,

python3-optionmenu.py
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() 裡,

python3-optionmenu2.py
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()

結果圖如下,

取得 tkinter OptionMenu 目前選項值

這邊示範如何按下 button 時取得 OptionMenu 目前選項值,將 tk.StringVar 跟 tk.OptionMenu 綁訂之後,透過 var.get() 來取得 OptionMenu 目前選項值,執行範例時會發現按下 button 時會在 button_event 裡將目前的 myoptionmenu 選項值顯示在 mylabel 的文字上,

python3-optionmenu3.py
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()

結果圖如下,

當 tkinter OptionMenu 選項改變時的事件通知

這邊示範當 OptionMenu 選項改變時的事件通知,

python3-optionmenu4.py
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

其它相關文章推薦
Python 新手入門教學懶人包
Python tkinter 新手入門教學