与Entry 类似,但可以指定输入范围值
创建一个Spinbox
代码:
import tkinter as tk
root = tk.Tk()
# root.geometry('200x100')
tk.Spinbox(root).pack()
root.mainloop()
结果:
只是创建了一个 Spinbox,其它的什么也做不了,与 Scale 不同,Scale 使用缺省值就可以控制 值的改变
设置 Spinbox 的最大、最小值和步距值
代码:
import tkinter as tk
root = tk.Tk()
tk.Spinbox(root,
from_=0, # 设置最小值
to=100, # 设置最大值
increment=5, # 设置增量值为5,这个与 Scale 的 resolution 意思相同
).pack()
root.mainloop()
结果:
设置 Spinbox 的值,设置属性 values,设置此值后,每次更新值将使用 values 指定的值
代码:
import tkinter as tk
root = tk.Tk()
sp = tk.Spinbox(root,
values=(0, 2, 20, 40, -1),
increment=2, # 设置增量值为2,这个与 Scale 的 resolution 意思相同
)
sp.pack()
# 打印当前的spinbox的值,一个元组(tuple)类型
print(sp['values'])
root.mainloop()
结果:
显示的第一个值为0,up 按钮则为2,20,40,-1,不再是增2操作,它会使用 tuple 的索引递增,至到 tuple 的最后一个项时,将不再增加,至到 tuple 的最后一个项时,将不再增加
down 按钮与 up 按钮恰好相反,它使用 tuple 的索引递减
Spinbox 绑定变量
代码:
import tkinter as tk
root = tk.Tk()
v = tk.StringVar()
sp = tk.Spinbox(root,
values=(0, 2, 20, 40, -1),
increment=1, # 设置增量值为1,这个与 Scale 的 resolution 意思相同
textvariable=v,
)
# 设置初始值为20
v.set(20)
print(v.get())
sp.pack()
# 打印当前的spinbox的值,一个元组(tuple)类型
print(sp['values'])
root.mainloop()
结果:
上面的代码将变量 v 与 sb 绑定,并将 Spinbox 的初始值设置为20,运行程序,Spinbox 的值显示为20,再点击 up 按钮,此时值变为40
再看下面的代码,与这个不同的是设置的值不包含在 tuple 之内
代码:
import tkinter as tk
root = tk.Tk()
v = tk.StringVar()
sp = tk.Spinbox(root,
values=(0, 2, 20, 40, -1),
increment=1, # 设置增量值为1,这个与 Scale 的 resolution 意思相同
textvariable=v,
)
# 设置初始值为200
v.set(200)
print(v.get())
sp.pack()
# 打印当前的spinbox的值,一个元组(tuple)类型
print(sp['values'])
root.mainloop()
效果:
运行程序,显示的值为200,再次点击 up 按钮,显示的值为0,即虽然 Spinbox 能将值显示出来,但并不会将200添加到变量中,此时的索引值依旧为0,因为没有找到200的项。当点击 up 时,索引值变为1,即显示的值为2
设置 Spinbox 的回调函数
代码:
import tkinter as tk
root = tk.Tk()
def printspin():
print('Spinbox')
sp = tk.Spinbox(root,
from_=0, # 最小值
to=10, # 最大值
increment=1, # 设置增量值为1,这个与 Scale 的 resolution 意思相同
command=printspin, # 回调函数
)
sp.pack()
root.mainloop()
结果:
每次点击 Spinbox 按钮时就会调用 printSpin 函数,打印出'Spinbox'。与 Scale 不同的是:它不需要参数
打印 Spinbox 的当前内容,是显示的值,不是 values 的值
代码:
import tkinter as tk
root = tk.Tk()
def printspin():
# 使用get()方法来得到当前的显示值
print(sp.get())
sp = tk.Spinbox(root,
from_=0, # 最小值
to=10, # 最大值
increment=1, # 设置增量值为1,这个与 Scale 的 resolution 意思相同
command=printspin, # 回调函数
)
sp.pack()
root.mainloop()
结果
每次点击 Spinbox 按钮时就会调用 printSpin 函数,打印出 Spinbox 的当前值
删除 Spinbox 指定位置的字符
代码:
import tkinter as tk
root = tk.Tk()
def printspin():
sp.delete(0)
print(sp.get())
sp = tk.Spinbox(root,
values=(123456789,23456789,3456789,456789,56789,6789,789,89,9),
increment=0, # 设置增量值为0,这个与 Scale 的 resolution 意思相同
command=printspin, # 回调函数
)
sp.pack()
root.mainloop()
效果:
在 Spinbox 指定位置插入文本
代码:
import tkinter as tk
root = tk.Tk()
def printspin():
sp.insert(tk.END, '.00')
print(sp.get())
sp = tk.Spinbox(root,
from_=1234, # 最小值
to=9999, # 最大值
increment=1, # 设置增量值为1,这个与 Scale 的 resolution 意思相同
command=printspin, # 回调函数
)
sp.pack()
root.mainloop()
效果:
每次点击 Spinbox 按钮时就会调用 printSpin 函数,当前的显示值均添加了两个有数字".00"