Spinbox控件可以用来从一组数据中选择一个数,也可以用来对设定值进行微调。还是先看动作视频:


首先还是准备字体和信息标签:


 


 

# create fontftTimes = 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​

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】