Python tkinter Radiobutton 單選框用法與範例

本篇 ShengYu 介紹 Python tkinter Radiobutton 單選框用法與範例,Radiobutton 可以作一些多選項擇一的選取功能,例如性別選取、葷素食選取等等。

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

  • tkinter Radiobutton 基本用法
  • tkinter Radiobutton 多組選取
  • tkinter 設定 Radiobutton 選取選項或取消選取選項
  • tkinter Radiobutton 綁定事件

那我們開始吧!

tkinter Radiobutton 基本用法

這邊介紹 tkinter 建立 Radiobutton 的基本用法,Radiobutton 基本上也是個按鈕,在建構 Radiobutton 時帶入顯示的文字,多個 Radiobutton 在同一個父類視窗下是互斥的,也就是在同一個父類視窗下的多個 Radiobutton 只能一個選取一個,如果選取另一個 Radiobutton 的話,先前選取的 Radiobutton 則會被取消,Radiobutton 搭配 variable 屬性使用的話則可以實做出多群組 Radiobutton 的互斥選取,稍後會介紹到。

以下示範三個 Radiobutton 的建立以及使用 select() 來選取預設選項,

python3-radiobutton.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
root = tk.Tk()
root.title('my window')
root.geometry('200x150')

myradiobutton1 = tk.Radiobutton(root, text='apple', value=1)
myradiobutton1.select()
myradiobutton1.pack()
myradiobutton2 = tk.Radiobutton(root, text='banana', value=2)
myradiobutton2.pack()
myradiobutton3 = tk.Radiobutton(root, text='orange', value=3)
myradiobutton3.pack()

root.mainloop()

結果圖如下,所以實際操作時可以發現同一群裡的 Radiobutton 單選框是互斥的,只能選擇其中一個 Radiobutton,

那如果想要實作 Radiobutton 多組選取呢?在下節範例馬上為你介紹。

tkinter Radiobutton 多組選取

tkinter 如果想要做出 Radiobutton 多組選取要怎麼實作呢?

這時候可以使用 tk.Radiobuttonvariablevar 屬性,這邊示範兩群組 Radiobutton 選取,將二個群組 Radiobutton 的 variable 屬性各設定成二個 tk.StringVar,這邊我們建立二個 tk.StringVar 分別為 var1 跟 var2,把 myradiobutton1 ~ myradiobutton3 設定成 variable=var1,把 myradiobutton4 ~ myradiobutton6 設定成 variable=var2,同時也把 layout 改成 grid,左邊為第一群,右邊為第二群,方便示範說明,

python3-radiobutton2.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
27
28
29
30
31
32
33
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
root = tk.Tk()
root.title('my window')
root.geometry('200x150')

var1 = tk.StringVar()
var2 = tk.StringVar()
var1.set(1)
var2.set(5)

myradiobutton1 = tk.Radiobutton(root, text='apple',
var=var1, value=1)
myradiobutton1.grid(column=0, row=0)
myradiobutton2 = tk.Radiobutton(root, text='banana',
var=var1, value=2)
myradiobutton2.grid(column=0, row=1)
myradiobutton3 = tk.Radiobutton(root, text='orange',
var=var1, value=3)
myradiobutton3.grid(column=0, row=2)

myradiobutton4 = tk.Radiobutton(root, text='lemon',
var=var2, value=4)
myradiobutton4.grid(column=1, row=0)
myradiobutton5 = tk.Radiobutton(root, text='strawberry',
var=var2, value=5)
myradiobutton5.grid(column=1, row=1)
myradiobutton6 = tk.Radiobutton(root, text='tomato',
var=var2, value=6)
myradiobutton6.grid(column=1, row=2)

root.mainloop()

程式啟動後,選取了 apple 與 strawberry,結果圖如下,第一群跟第二群的選取是互相不影響的,

這樣就學會 tkinter Radiobutton 多組選取了

tkinter 設定 Radiobutton 選取選項或取消選取選項

這邊介紹 tkinter 設定 Radiobutton 選取選項或取消選取選項的方法,也可以用來設定 Radiobutton 預設的選項,建立 Radiobutton 後預設是不勾選的狀態,tkinter 有兩種方式可以改變這個狀態,
第一種方法是使用 Radiobutton.select() 函式,Radiobutton.select() 就是選擇當前的 Radiobutton,原本同組的 Radiobutton 的選取會被取消,也可以使用來 Radiobutton.deselect() 取消選擇,範例如下,

python3-radiobutton3.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
root = tk.Tk()
root.title('my window')
root.geometry('200x150')

myradiobutton1 = tk.Radiobutton(root, text='apple', value=1)
myradiobutton1.pack()
myradiobutton2 = tk.Radiobutton(root, text='banana', value=2)
myradiobutton2.pack()
myradiobutton3 = tk.Radiobutton(root, text='orange', value=3)
myradiobutton3.pack()

myradiobutton1.deselect()
myradiobutton2.select()

root.mainloop()

上述範例最後會看到被 myradiobutton2 選取,myradiobutton1 則是不會被選取,如下圖所示,

第二種方法是在建立 tk.Radiobutton 時設定 variablevar 屬性,如下例中的 var,使用 StringVar.set() 設定數值,然後 var 變數的數值決定選取哪個選項,範例如下,

python3-radiobutton4.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk
root = tk.Tk()
root.title('my window')
root.geometry('200x150')

var = tk.StringVar()

myradiobutton1 = tk.Radiobutton(root, text='apple',
variable=var, value=1)
myradiobutton1.pack()
myradiobutton2 = tk.Radiobutton(root, text='banana',
variable=var, value=2)
myradiobutton2.pack()
myradiobutton3 = tk.Radiobutton(root, text='orange',
variable=var, value=3)
myradiobutton3.pack()

var.set(3)

root.mainloop()

上述範例使用 var.set(3) 就是選取 myradiobutton3,如下圖所示,

tkinter Radiobutton 綁定事件

這邊介紹 tkinter Radiobutton 如何綁定事件,這邊我們將第一群 Radiobutton 連結至 radiobutton_event(),第二群 Radiobutton 連結至 radiobutton_event2(),然後一個 Button 的事件連結至 button_event(),當每個群的 Radiobutton 被選取時就會在事件函式裡去紀錄當時選擇的水果名稱,最後按下 Button 時會印出這兩群的選取各是什麼水果,範例如下,

python3-radiobutton5.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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import tkinter as tk


def radiobutton_event(widget):
print('radiobutton_event: ' + var1.get() + ' checked')
global fruit1
fruit1 = widget['text']


def radiobutton_event2(widget):
print('radiobutton_event2: ' + var2.get() + ' checked')
global fruit2
fruit2 = widget['text']


def button_event():
print(var1.get() + ' + ' + var2.get())
print(fruit1 + ' + ' + fruit2)

root = tk.Tk()
root.title('my window')
root.geometry('200x150')

fruit1 = ''
fruit2 = ''
var1 = tk.StringVar()
var2 = tk.StringVar()

myradiobutton1 = tk.Radiobutton(root, text='apple',
variable=var1, value=1,
command=lambda: radiobutton_event(myradiobutton1))
myradiobutton1.grid(column=0, row=0)
myradiobutton2 = tk.Radiobutton(root, text='banana',
variable=var1, value=2,
command=lambda: radiobutton_event(myradiobutton2))
myradiobutton2.grid(column=0, row=1)
myradiobutton3 = tk.Radiobutton(root, text='orange',
variable=var1, value=3,
command=lambda: radiobutton_event(myradiobutton3))
myradiobutton3.grid(column=0, row=2)

myradiobutton4 = tk.Radiobutton(root, text='lemon',
variable=var2, value=4,
command=lambda: radiobutton_event2(myradiobutton4))
myradiobutton4.grid(column=1, row=0)
myradiobutton5 = tk.Radiobutton(root, text='strawberry',
variable=var2, value=5,
command=lambda: radiobutton_event2(myradiobutton5))
myradiobutton5.grid(column=1, row=1)
myradiobutton6 = tk.Radiobutton(root, text='tomato',
variable=var2, value=6,
command=lambda: radiobutton_event2(myradiobutton6))
myradiobutton6.grid(column=1, row=2)

mybutton = tk.Button(root, text='button', command=button_event)
mybutton.grid(column=1, row=3)

var1.set(1)
var2.set(4)

root.mainloop()

結果圖如下,

程式輸出如下,

1
2
3
4
radiobutton_event: 2 checked
radiobutton_event2: 6 checked
2 + 6
banana + tomato

在這範例中我們已經學習到在事件函式裡如何取得 Radiobutton 設定的值 (value) 以及取得 Radiobutton 設定的文字 (text),

以上就是 Python tkinter Radiobutton 單選框用法與範例介紹,
如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚支持一下!

其它參考
python - Event triggered by Listbox and Radiobutton in Tkinter - Stack Overflow
https://stackoverflow.com/questions/26333769/event-triggered-by-listbox-and-radiobutton-in-tkinter

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