Python tkinter Combobox 用法與範例

本篇 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 參數,

python3-combobox.py
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 屬性即可。

python3-combobox2.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
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' 的參數,

python3-combobox3.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
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 來綁定事件。

python3-combobox4.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
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

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