本篇 ShengYu 介紹 Python tkinter Combobox 用法與範例,ComboBox 下拉式選單通常適用於讓使用者從多個選項中選擇一個的情境,
以下的 Python tkinter Combobox 用法與範例將分為這幾部分,
- tkinter 建立 Combobox
- tkinter 設定 Combobox 預設的選項
- tkinter 取得目前 Combobox 的選項
- tkinter Combobox 綁定事件
tkinter 的 Combobox widget 是在 Tkinter 的 ttk 模組中,所以需要另外 import tkinter.ttk
才能使用。
tkinter 建立 Combobox
tkinter 建立 ttk.Combobox 的用法如下,建立 ttk.Combobox()
的同時可以將選項的數值一併設定進去,也就是 Combobox 的 values
參數,1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
root.title('my window')
root.geometry('200x150')
mycombobox = ttk.Combobox(root, values=[
'apple',
'banana',
'orange',
'lemon',
'tomato'])
mycombobox.pack(pady=10)
root.mainloop()
結果圖如下,
tkinter 設定 Combobox 預設的選項
tkinter 要設定 ttk.Combobox 預設選項的話,可以透過 Combobox.current()
函式來設定,索引值從0開始,第一個選項的索引值為0,這邊也示範選項的數值可以在建立完 Combobox 之後再設定 Combobox 的 values 屬性即可。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
import tkinter.ttk as ttk
root = tk.Tk()
root.title('my window')
root.geometry('200x150')
mycombobox = ttk.Combobox(root)
mycombobox['values'] = ['apple','banana','orange','lemon','tomato']
mycombobox.pack(pady=10)
mycombobox.current(0)
root.mainloop()
結果圖如下,
tkinter 取得目前 Combobox 的選項
示範按下按鈕顯示目前選取的 Combobox 選項,就把目前的 Combobox 選項顯示在按鈕上,使用 Combobox.current()
不傳入任何參數可以取得目前的索引值,使用 Combobox.get()
可以取得目前 Combobox 的選項,在之前就已經透過 buttonText 與 tk.Button
綁定,所以之後修改 buttonText 就會顯示在該按鈕的名稱上,如果要讓選項只能讀取不能修改的話,可以加上 state='readonly'
的參數,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
import tkinter.ttk as ttk
def button_event():
print(mycombobox.current(), mycombobox.get())
buttonText.set('idx:' + str(mycombobox.current()) + ', ' + mycombobox.get())
root = tk.Tk()
root.title('my window')
root.geometry('200x150')
comboboxList = ['apple','banana','orange','lemon','tomato']
mycombobox = ttk.Combobox(root, state='readonly')
mycombobox['values'] = comboboxList
mycombobox.pack(pady=10)
mycombobox.current(0)
buttonText = tk.StringVar()
buttonText.set('button')
tk.Button(root, textvariable=buttonText, command=button_event).pack()
root.mainloop()
結果圖如下,
tkinter Combobox 綁定事件
有時我們會希望當 Combobox 有變動時可以處理這個事件的邏輯,例如下列例子中,當 Combobox 發生改變時就讓 label 顯示對應的選項,這其中就要用到 Combobox.bind
來綁定事件。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
26#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.ttk as ttk
def combobox_selected(event):
print(mycombobox.current(), comboboxText.get())
labelText.set('my favourite fruit is ' + comboboxText.get())
root = tk.Tk()
root.title('my window')
root.geometry('200x150')
comboboxText = tk.StringVar()
mycombobox = ttk.Combobox(root, textvariable=comboboxText, state='readonly')
mycombobox['values'] = ['apple','banana','orange','lemon','tomato']
mycombobox.pack(pady=10)
mycombobox.current(2)
mycombobox.bind('<<ComboboxSelected>>', combobox_selected)
labelText = tk.StringVar()
mylabel = tk.Label(root, textvariable=labelText, height=5, font=('Arial', 12))
mylabel.pack()
root.mainloop()
結果圖如下,
以上就是 Python tkinter Combobox 用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!
其它參考
tkinter.ttk — Tk themed widgets — Python 3 documentation
https://docs.python.org/3/library/tkinter.ttk.html#combobox