#可能不会调用,通过上例可以看到二者的值是完全一样的。
'''5.控制显示位数,可以理解为:Scale的值为一整形,在输出显示时,它将会被转化为一字符串,如1.2转化为1.2或1.2000都是可以的'''
#属性digits是控制显示的数字位数,将上面的例子中的数据以8位形式显示,在最后一位会添加一个0
# -*- coding: cp936 -*- from Tkinter import *
root = Tk()
def printScale(text): print 'text = ',text print 'v = ',v.get() v = StringVar() Scale(root,
from_ = 0, #设置最小值 to = 100.0, #设置最大值
resolution = 0.0001, #设置步距值 orient = HORIZONTAL, #设置水平方向 digits = 8, #设置显示的位数为8 variable = v, #绑定变量
command = printScale #设置回调函数 ).pack() print v.get() root.mainloop()
'''6.设置Scale的标签属性label''' # -*- coding: cp936 -*- from Tkinter import *
root = Tk() Scale(root,
from_ = 0, #设置最大值 to = 100.0, #设置最小值
orient = HORIZONTAL, #设置水平方向 label = 'choice:', #设置标签值 ).pack() root.mainloop()
#由label设置的值会显示在水平Scale的上方,用于提示信息
'''7.设置/取得Scale的值''' # -*- coding: cp936 -*- from Tkinter import *
root = Tk()
sl = Scale(root)
sl.set(50) #将Scale的值设置为50 print sl.get() #打印当前的Scale的值 sl.pack()
root.mainloop()
#slider的位置位于了中间,sl.set(50)起作用了,打印值为50。
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 -*-