Spinbox 数值调整元件
Spinbox 是 tkinter 里用来让用户将数值“上下调整”的调整元件,这篇教学会介绍如何在 tkinter 视窗里加入 Spinbox 数值调整元件,并实作套用改变数值后的简单应用。
快速导览:
因为 Google Colab 不支援 tkinter,所以请使用本机环境 ( 参考:使用 Python 虚拟环境 ) 或使用 Anaconda Jupyter 进行实作 ( 参考:使用 Anaconda )。
加入 Spinbox
建立 tkinter 视窗对象后,透过 Spinbox 方法,就能在视窗对象中建立 Spinbox 数值调整元件,必要的参数有三个,第一个表示要加入的视窗对象,第二个 from_ 表示起始值,to 表示结束值,最后再用 pack() 方法将其加入视窗中 ( 参考 pack 参数设定 ),下方的程序码执行后,会在视窗里加入一个可以调整 0~100 的 Spinbox ( 位置、大小和颜色都使用默认值 )。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('200x200')
spinbox = tk.Spinbox(root, from_=0, to=100)
spinbox.pack()
root.mainloop()
Spinbox 参数设定
加入 Spinbox 之后,可以透过 Spinbox 的参数调整内容的样式,下方列出 Spinbox 和其他元件相同的参数:
| 参数 | 说明 |
|---|---|
| width | 宽度,单位是字元数,默认 20。 |
| 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。 |
| command | 调整时要执行的函数。 |
| disabledbackground | 停用时的背景色。 |
| disabledforeground | 停用时的文字颜色。 |
下方是 Spinbox 数值调整元件行为相关的参数:
| 参数 | 说明 |
|---|---|
| from_ | 起始值。 |
| to | 结数值。 |
| increment | 每次可以调整的数值,默认 1。 |
| values | 使用 tuple 格式代替 ( from_, to, increment )。 |
| activebackground | 正在调整时的背景色可以使用十六进制色码或颜色名称。 |
| textvariable | 绑定文字变数,存取 Spinbox 数值。 |
| wrap | 向上钮到最大值时是否变为最小值 ( 或到最小时变成最大 ),默认 False,可设定 True。 |
| format | 数值格式字串。例如 %10.4f 表示共 10 个数字浮点数含 4 位小数。 |
| state | 停用或启用状态,默认 normal 启用,可设定 disables 停用或 readonly 仅可读取。 |
Spinbox 操作方法
透过下列方法,可以进行 Spinbox 数值调整元件的相关操作:
| 方法 | 参数 | 说明 |
|---|---|---|
| index() | index | 定义一个要显示的数值。 |
| get() | 取得目前 Spinbox 的值 ( 文字 )。 | |
| invoke() | element | 模拟按上下键动作 ( buttonup/buttondown )。 |
调整并即时显示数值
下方的程序码执行后,透过 tkinter 的变数,就能让 Label 即时显示 Spinbox 改变的数值。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('300x300')
a = tk.StringVar() # 建立 tk 變數
a.set('') # 預設空值
def spin():
val = spinbox.get() # 定義 spin 函式,每當 Spinbox 改變時執行函式
a.set(val) # 改變變數數值
label = tk.Label(root, textvariable=a) # 建立 Label,顯示內容為變數
label.pack()
spinbox = tk.Spinbox(root, from_=0, to=100, command=spin) # 設定 command 為 spin 函式
spinbox.pack()
root.mainloop()
调整并即时进行数字加总
如果有两个 Spinbox,可以将两者的 command 都指向同一个函数,获取两者的数值后进行运算,下方的程序码执行后,当 Spinbox 调整时,就会进行即时的数字加总并透过 Label 显示结果。
import tkinter as tk
root = tk.Tk()
root.title('oxxo.studio')
root.geometry('300x300')
a = tk.StringVar()
a.set('0.0')
def spin():
val1 = float(spinbox1.get()) # 將文字轉換成浮點數
val2 = float(spinbox2.get()) # 將文字轉換成浮點數
a.set(val1 + val2) # 數字加總
label = tk.Label(root, textvariable=a)
label.pack()
spinbox1 = tk.Spinbox(root, from_=0, to=100, command=spin)
spinbox1.pack()
spinbox2 = tk.Spinbox(root, from_=0, to=100.0, increment=0.1, command=spin)
spinbox2.pack()
root.mainloop()
微信扫码关注
抖音扫码关注