Radiobutton 单选按钮
Radiobutton 是 tkinter 里用来可以让用户用鼠标进行“单选”的按钮对象,这篇教学会介绍如何在 tkinter 视窗里加入 Radiobutton 单选按钮,并实作选择 Radiobutton 后进行互动的程序。
快速导览:
因为 Google Colab 不支援 tkinter,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda )。
加入 Radiobutton
建立 tkinter 视窗对象后,透过 Radiobutton 方法,就能在视窗对象中建立 Radiobutton 单选按钮,必要的参数有两个,第一个表示要加入的视窗对象,第二个则是标签参数 ( 通常是文字 text、图片 image ),建立 Radiobutton 后再使用 pack() 方法将其加入 ( 参考 pack 参数设定 ),下方的程序码执行后,会在视窗里加入两个 Radiobutton ( 位置、大小和颜色都使用默认值 ),因为尚未做其他设定,所以两个单选按钮都会处在已经选取的状态。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
radio_btn1 = tk.Radiobutton(root, text='Apple') # 放入第一個單選按鈕
radio_btn1.pack()
radio_btn2 = tk.Radiobutton(root, text='Banana') # 放入第二個單選按鈕
radio_btn2.pack()
root.mainloop()
绑定多个 Radiobutton
下方的程序码先使用 StringVar() 方法建立文字变数 ( 或使用 IntVar() 建立数字变数 ),接着将不同的 Radiobutton variable 参数指向同样的文字变数,就能绑定多个 Radiobutton 单选按钮,绑定完成后,使用 select() 方法,可以指定选取某个按钮,选取后会将文字变数更新为 value 参数的内容。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
val = tk.StringVar()
radio_btn1 = tk.Radiobutton(root, text='Apple',variable=val, value='Apple')
radio_btn1.pack()
radio_btn1.select() # 搭配 select() 方法選取 radio_btn1
radio_btn2 = tk.Radiobutton(root, text='Banana',variable=val, value='Banana')
radio_btn2.pack()
root.mainloop()
Radiobutton 参数设定
加入 Radiobutton 之后,可以透过 Radiobutton 的参数调整内容的样式,下方列出 Radiobutton 和其他元件相同的参数:
| 参数 | 说明 |
|---|---|
| anchor | 摆放位置,可以设定 n、s、w、e、ne、nw、sw、se、center ( e 右,w 左,s 下,n 上 ),默认 center。 |
| text | 文字内容,可以使用换行符 ( \n )。 |
| width | 宽度,单位是字元数,默认 0。 |
| height | 高度,单位是字元数,默认 0。 |
| padx | 内容和标签左右边界的间距 ( px ),默认 1。 |
| pady | 内容和标签上下边界的间距 ( px ),默认 1。 |
| bg/background | 背景颜色,可以使用十六进制色码或颜色名称。 |
| fg/foreground | 文字颜色,可以使用十六进制色码或颜色名称。 |
| font | 字型设定,包含字体、大小 ( px )、粗体 ( bold )、斜体 ( italic )。 |
| justify | 多行文字的对齐方式,可以设定 left、right、center,默认 center。 |
| cursor | 鼠标移动到标签的样式,可以设定 arrow、circle、cross、plus...等,默认 arrow。 |
| relief | 边框样式,可以设定 flat、sunken、raised、groove、ridge、solid,默认 flat。 |
| bd/borderwidth | 边框粗细,默认 1。 |
| textvariable | 文字内容的变数名称,如果变数被修改,文字就会发生变化。 |
| underline | 第几个字元开始加底线 ( 0 为第一个字元, 默认 -1 不加底线 )。 |
| wraplength | 一段文字超过多少宽度 ( px ) 会换行。 |
| image | 图片内容。 |
| bitmap | 使用 bitmap 图示作为标签内容。 |
| compound | 设定文字与图片排列的方式,可以设定 none、center、top、bottom、left、right,默认 none。 |
下方是 Radiobutton 单选按钮行为相关的参数:
| 参数 | 说明 |
|---|---|
| variable | 绑定哪个变数。 |
| value | 选择该按钮时回传到变数的值。 |
| command | 按下按钮要执行的函数。 |
| state | 按钮状态,tk.NORMAL 可使用 ( 默认 )、tk.DISABLED 不可使用。 |
Radiobutton 切换不同文字
下方的程序码除了包含两个 Radiobutton ( 绑定 val,并设定其 value ),额外放入一个带有参数 textvariable=val 的 Label 标签,执行后点击 Radiobutton,就可以切换标签文字。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
val = tk.StringVar() # 建立文字變數
# 放入第一個 Radiobutton
radio_btn1 = tk.Radiobutton(root, text='Apple',variable=val, value='Apple')
radio_btn1.pack()
radio_btn1.select() # 選擇第一個 Radiobutton
# 放入第二個 Radiobutton
radio_btn2 = tk.Radiobutton(root, text='Banana',variable=val, value='Banana')
radio_btn2.pack()
# 放入 Label 標籤,設定 textvariable=val
mylabel = tk.Label(root, textvariable=val, font=('Arial',30), fg='#f00')
mylabel.pack()
root.mainloop()
invoke() 调用按钮
建立 Radiobutton 按钮之后,可以使用 invoke() 方法调用按钮,也就是执行 invoke() 之后等同按下该颗按钮,以上面切换文字的程序码为例,如果在最后面加上 radio_btn2.invoke(),呈现的结果就会是点击第二颗按钮出现的 Banana 文字。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
val = tk.StringVar()
radio_btn1 = tk.Radiobutton(root, text='Apple',variable=val, value='Apple')
radio_btn1.pack()
radio_btn1.select()
radio_btn2 = tk.Radiobutton(root, text='Banana',variable=val, value='Banana')
radio_btn2.pack()
mylabel = tk.Label(root, textvariable=val, font=('Arial',30), fg='#f00') # 放入標籤
mylabel.pack()
radio_btn2.invoke() # 使用 invoke()
root.mainloop()
微信扫码关注
抖音扫码关注