浙江网站建设服务/360免费建站
Spinbox控件可以用来从一组数据中选择一个数,也可以用来对设定值进行微调。还是先看动作视频:
视频链接
首先还是准备字体和信息标签:
# create font
ftTimes = Font(family='Times', size=12, weight=BOLD)
# create a label to display message.
label_text = StringVar()
label = Label(root, textvariable=label_text)
label.grid(row=2, column=0, columnspan=2, sticky=E + W)
生成一个用于文本选择的Spinbox:
# value changed handling.
def spin_changed(*args):
# get current value and set to label.
label_text.set(tb.get())
# create a Radiobutton for Teacher.
tb = Spinbox(root,values=('Teacher', 'Student', 'Worker'),
state='readonly',
background="#ffffa0",foreground="#ff0000",
activebackground="#a0ffa0",
command=spin_changed, font=ftTimes)
tb.grid(row=0, column=0, columnspan=1, sticky=W)
spin_changed函数用于处理选择内容发生变化时的表示。它在构建Spinbox控件时通过command属性指定,其内容是使用Spinbox的get方法取得选中的内容并设定到标签控件上。
spinbox通过values属性指定可选项集合。state指定为'readonly'可以限制用户输入。
第二个Spinbox是一个数字微调框,其代码如下:
# control variable of value spinbox.
vb_var = StringVar()
vb_var.set('0.6')
def isOkay(text):
if text == '-':
return True
if len(text)==0:
return True
value = int(float(text) * 100)
if -100 <= value <= 100:
if value % 20 == 0:
return True
return False
首先声明一个StringVar类型的变量用于设定和取得当前的选择结果。
接下来的isOkay函数需要说明一下。它的功能是当用户对Spinbox的选择结果进行按键操作时判断内容的合法性。在这个函数中,我们认为单独的‘-’,空字符或者-1到1之间、间隔为0.2的值都是合法的。
接下来将这个函数登录到root窗口。
okayCommand=root.register(isOkay)
在构建数值输入SpinBox时,首先使用from_,to_和increment属性执行合法数值。wrap=True可以实现数值的循环。
# create a value spinbox.
vb = Spinbox(root,
from_=-1.0,to=1.0,increment=0.2,wrap=True,
background="#ffffa0", foreground="#ff0000",
activebackground="#a0ffa0",
textvariable=vb_var, font=ftTimes,
validate='key',
validatecommand=(okayCommand, '%P'))
vb.grid(row=1, column=0, columnspan=1, sticky=W)
validatecommand属性用于指定前面准备的okayCommand,'%P'表示参数为待检查的输入结果。另外一个validate属性指定为'key'表示这个命令会在用户键操作时被调用。这两个属性加上isOkey函数和注册okayCommand四者结合在一起,实现了输入检查。
最后是监控变量的内容并表示在信息标签上。
def var_changed(*args):
label_text.set(vb_var.get())
# set variable observer.
vb_var.trace_variable('w', var_changed)
完整代码可以从下面的链接下载:
https://github.com/xueweiguo/TkinterPrimer/blob/master/Sample/12%20Spinbox.py
觉得本文有帮助?请分享给更多人。
更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】