Tkinter教程之Spinbox篇
jcodeer
|
1#
jcodeer 发表于 2007-10-01 18:48
Tkinter教程之Spinbox篇'''Tkinter教程之Spinbox篇''' #与Entry类似,但可以指定输入范围值 '''1.创建一个Spinbox''' from Tkinter import * root = Tk() Spinbox(root).pack() root.mainloop() #只是创建了一个Spinbox,其它的什么也做不了,与Scale不同,Scale使用缺省值就可以控制 值的改变。 '''2.设置Spinbox的最大、最小值和步距值''' # -*- coding: cp936 -*- from Tkinter import * root = Tk() Spinbox(root, from_ = 0, #设置最小值 to = 100, #设置最大值 increment = 5 #设置增量值为5,这个与Scale的resolution意思相同 ).pack() root.mainloop() '''3.设置Spinbox的值,设置属性values,设置此值后,每次更新值将使用values指定的值,''' # -*- coding: cp936 -*- from Tkinter import * root = Tk() sb = Spinbox(root, values = (0,2,20,40,-1), increment = 2 ) sb.pack() # 打印当前的Spinbox的值,为一tuple print sb['values'] root.mainloop() #显示的第一个值为0,up按钮则为2,20,40,-1,不再是增2操作,它会使用tuple的索引递增,至到tuple的最后一个项时,将不再增加; #down按钮与up按钮恰好相反,它使用tuple的索引递减 '''4.Spinbox绑定变量 ''' # -*- coding: cp936 -*- from Tkinter import * root = Tk() v = StringVar() sb = Spinbox(root, values = (0,2,20,40,-1), increment = 2, textvariable = v ) v.set(20) print v.get() sb.pack() # 打印当前的Spinbox的值,为一tuple root.mainloop() #上面的代码将变量v与sb绑定,并将Spinbox的初始值设置为20,运行程序,Spinbox的值显示为20,再点击up按钮,此时值变为40, #即tuple的下一个值,再看下面的代码,与这个不同的是设置的值不包含在tuple之内 # -*- coding: cp936 -*- from Tkinter import * root = Tk() v = StringVar() sb = Spinbox(root, values = (0,2,20,40,-1), increment = 2, textvariable = v ) v.set(200) print v.get() sb.pack() # 打印当前的Spinbox的值,为一tuple root.mainloop() #运行程序,显示的值为200,再次点击up按钮,显示的值为2,即虽然Spinbox能将值显示出来,但并不会将200添加到变量中,此时的 #索引值依旧为0,因为没有找到200的项。当点击up时,索引值变为1,即显示的值为2。 '''5.设置Spinbox的回调函数''' # -*- coding: cp936 -*- from Tkinter import * root = Tk() def printSpin(): print 'Spinbox' sb = Spinbox(root, from_ = 0, #最小值 to = 10, #最大值 command = printSpin#回调函数 ) sb.pack() root.mainloop() #每次点击Spinbox按钮时就会调用printSpin函数,打印出'Spinbox'。与Scale不同的是:它不需要参数。 '''6.打印Spinbox的当前内容,是显示的值,不是values的值。''' # -*- coding: cp936 -*- from Tkinter import * root = Tk() def printSpin(): # 使用get()方法来得到当前的显示值 print sb.get() sb = Spinbox(root, from_ = 0, #最小值 to = 10, #最大值 command = printSpin#回调函数 ) sb.pack() root.mainloop() #每次点击Spinbox按钮时就会调用printSpin函数,打印出Spinbox的当前值。 '''7.删除Spinbox指定位置的字符(这是个有问题的程序)''' #在回调函数中使用delete,Spinbox初始值为1234,点击up一次Spinbox的值变为235,再次点击变为36,再次点击变为7,但实际执行结果 #为第一次点击235,再次点击为234,以后所有的点击操作均为此值。不知为何。 # -*- coding: cp936 -*- from Tkinter import * root = Tk() def printSpin(): sb.delete(0) print sb.get() sb = Spinbox(root, from_ = 1234, #最小值 to = 9999, #最大值 increment = 1, command = printSpin#回调函数 ) sb.pack() root.mainloop() # 如果不使用回调函数,两次调用delete则可以正常,工作如下代码: # -*- coding: cp936 -*- from Tkinter import * root = Tk() sb = Spinbox(root, from_ = 1234, #最小值 to = 9999, #最大值 increment = 1 ) sb.delete(0) sb.delete(0) print sb.get() sb.pack() root.mainloop() #此程序正常,可以打印出正确结果'34' '''关于delete回调函数异常问题,又使用如下代码作了实验''' # -*- coding: cp936 -*- from Tkinter import * root = Tk() def printSpin(): # 使用delete()方法删除指定索引的字符 sb.delete(0) print sb.get() sb = Spinbox(root, values = (1234,234,34,4), command = printSpin ) sb.pack() root.mainloop() #则这个程序点击up可以打印出34,再次点击则为空。 ''' 这个是可以工作的:①当前的值为1234,②点击up按钮时,程序调用回调函数printSpin将Spinbox的当 前值变为234;③Spinbox查找值为234的项,得到索引为1,即当前的索引值变为1,up还会将索引增1,即变为2,所有显示的值 为34,为了更好理解,用如下代码再次测试: ''' # -*- coding: cp936 -*- from Tkinter import * root = Tk() def printSpin(): # 使用delete()方法删除指定索引的字符 sb.delete(0) print sb.get() sb = Spinbox(root, values = (1234567890,234567890,34567890,4567890,567890, 67890,7890,890,90,0), command = printSpin #回调函数 ) sb.pack() root.mainloop() #这个程序显示的依次是1234567890,34567890,567890,7890,90。 #还不了解内部工作原理,先这样理解吧,使用delete时注意可能会出现这样的问题。 '''8.在Spinbox指定位置插入文本''' #在每项后面添加.00表示精度,同样使用回调函数实现,代码如下: # -*- coding: cp936 -*- from Tkinter import * root = Tk() def printSpin(): # 使用get()方法来得到当前的显示值 sb.insert(END,'.00') print sb.get() sb = Spinbox(root, from_ = 1234, #最小值 to = 9999, #最大值 increment = 1, command = printSpin#回调函数 ) sb.pack() root.mainloop() #每次点击Spinbox按钮时就会调用printSpin函数,当前的显示值均添加了两个有数字".00"。这个与delete不同,倒是可以正确显示。 ''' delete所遇到的问题,insert真的就不会发生吗?再次对上面的代码进行测试,代码如下: ''' # -*- coding: cp936 -*- from Tkinter import * root = Tk() def printSpin(): # 使用get()方法来得到当前的显示值 sb.insert(END,'0') print sb.get() sb = Spinbox(root, from_ = 1234, #最小值 to = 9999, #最大值 increment = 1, command = printSpin #回调函数 ) sb.pack() root.mainloop() #在每个项的后加一个0,即将值变为原来的10倍,则程序的输出结果为123450,99990,同样也出现了异常 #现象,第一个例子的中出现正确的情况纯粹是个偶然,在整数的后添加.00相当于没有对其值进行改变,故下次 #使用的值依旧没有变化。 |