本篇 ShengYu 介紹 Python tkinter Radiobutton 單選框用法與範例,Radiobutton 可以作一些多選項擇一的選取功能,例如性別選取、葷素食選取等等。
以下的 Python tkinter Radiobutton 用法與範例將分為這幾部分,
- tkinter Radiobutton 基本用法
- tkinter Radiobutton 多組選取
- tkinter 設定 Radiobutton 選取選項或取消選取選項
- tkinter Radiobutton 綁定事件
那我們開始吧!
這邊介紹 tkinter 建立 Radiobutton 的基本用法,Radiobutton 基本上也是個按鈕,在建構 Radiobutton 時帶入顯示的文字,多個 Radiobutton 在同一個父類視窗下是互斥的,也就是在同一個父類視窗下的多個 Radiobutton 只能一個選取一個,如果選取另一個 Radiobutton 的話,先前選取的 Radiobutton 則會被取消,Radiobutton 搭配 variable
屬性使用的話則可以實做出多群組 Radiobutton 的互斥選取,稍後會介紹到。
以下示範三個 Radiobutton 的建立以及使用 select()
來選取預設選項,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 多組選取要怎麼實作呢?
這時候可以使用 tk.Radiobutton
的 variable
或 var
屬性,這邊示範兩群組 Radiobutton 選取,將二個群組 Radiobutton 的 variable
屬性各設定成二個 tk.StringVar
,這邊我們建立二個 tk.StringVar
分別為 var1 跟 var2,把 myradiobutton1 ~ myradiobutton3 設定成 variable=var1
,把 myradiobutton4 ~ myradiobutton6 設定成 variable=var2
,同時也把 layout 改成 grid,左邊為第一群,右邊為第二群,方便示範說明,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 選取選項或取消選取選項的方法,也可以用來設定 Radiobutton 預設的選項,建立 Radiobutton 後預設是不勾選的狀態,tkinter 有兩種方式可以改變這個狀態,
第一種方法是使用 Radiobutton.select()
函式,Radiobutton.select()
就是選擇當前的 Radiobutton,原本同組的 Radiobutton 的選取會被取消,也可以使用來 Radiobutton.deselect()
取消選擇,範例如下,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
時設定 variable
或 var
屬性,如下例中的 var,使用 StringVar.set()
設定數值,然後 var 變數的數值決定選取哪個選項,範例如下,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 如何綁定事件,這邊我們將第一群 Radiobutton 連結至 radiobutton_event()
,第二群 Radiobutton 連結至 radiobutton_event2()
,然後一個 Button 的事件連結至 button_event()
,當每個群的 Radiobutton 被選取時就會在事件函式裡去紀錄當時選擇的水果名稱,最後按下 Button 時會印出這兩群的選取各是什麼水果,範例如下,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
4radiobutton_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