第12章 Scale
Scale组件主要通过滑块来表示某个范围内的一个数字。你可以设置最小值和最大值,滚动的滑条取值在最大值和最小值之间。典型使用情形是在需要输入一个特定范围内的数值的时候,比如体温。
12.1 属性
属性 | 描述 |
---|---|
activebackground | 当鼠标放上去时,Scale的背景色 |
backgroud bg | 按钮的背景色 |
bigincrement | 快速调整数值的步长。 |
borderwidth bd | 边框的大小,默认为 2 个像素 |
command | 关联的函数,当按钮被点击时,执行该函数 |
digits | Scale的数值。 |
cursor | 光标的形状设定,如arrow, circle, cross, plus 等 |
font | 文本字体 |
foreground fg | 选项的前景色 |
from | 起始数值。默认值是0 |
highlightcolor | 聚焦的高亮颜色 |
highlightbackground | 聚焦的高亮背景颜色 |
highlightthickness | 聚焦高亮边框宽度 |
label | 标签。 |
length | Scale的长度 |
orient | 设置Scale的方向。可以是VERTICAL或者是HORIZONAL |
relief | 边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。 |
repeatdelay | 默认值是300 |
repeatinterval | 默认值是100 |
resolution | 默认值是1 |
showvalue | 默认值是1。 |
sliderlength | 默认值是30 |
sliderrelief | 定义滑块的装饰效果。参加relief属性。 |
state | Scale状态,默认为 state=NORMAL |
takefocus | 表示可以使用Tab键移动焦点到该控件。默认值是空字符串。 |
tickinterval | 默认值是0 |
to | 最大值或者结束值。默认是100。 |
troughcolor | 滑动槽颜色 |
variable | 与Scale关联的变量。 |
width | 定义Scale的宽度。默认值是15 |
12.1.1 activebackground
设置鼠标经过Scale控件时,滑块的颜色。
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,orient=tk.HORIZONTAL,
activebackground='red')
b1.pack()
root.mainloop()
结果:
12.1.2 backgroud(bg)
设置Scale控件的背景颜色。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length
=200,orient=tk.HORIZONTAL,bg='green')
b1.pack()
root.mainloop()
结果:
12.1.3 borderwidth(bd)
设置Scale控件边框宽度。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,bd=10)
b1.pack()
root.mainloop()
结果:
12.1.4 bigincrement
设置快速调整步长。当Scale控件获得输入焦点后,按下CTRL键的同时,使用左右箭头或者上下箭头按键,会以bigincrement定义的数值来快速调整数值。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,bd=10,
takefocus=1,bigincrement=5)
b1.pack()
root.mainloop()
12.1.5 command
设置回调函数。只有一个参数值,就是Scale控件的新的位置。如果滑块快速地移动,函数可能无法获得每一个位置,但一定会获得滑块停下时的最终位置。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
def pos(value):
print(value)
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,command=pos)
b1.pack()
root.mainloop()
12.1.6 digits
设置最多显示多少位数字。默认情况下,Scale的数值范围是(0,100)。假如digits=5,表示最多可以显示5位数字。由于最大数值位100,5位数字就是100.00。可以看到Scale的数值显示为x.00。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,digits=5)
b1.pack()
root.mainloop()
结果:
12.1.7 cursor
鼠标经过Scale控件时的形状。鼠标的形状详细说明见3.3.6节。
12.1.8 font
字体大小。字体的详细说明3.3.3节。
12.1.9 foreground(fg)
设置前景颜色。就是显示Scale数值的颜色。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,fg='blue')
b1.pack()
root.mainloop()
结果:
12.1.10 from 和 to
设置Scale的起始值以及结束值。默认from=0,to=100。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,from_=20,to=40)
b1.pack()
root.mainloop()
说明:由于from是关键字,所以用from_来替代。
12.1.11 highlightcolor、highlightbackground和highlightthickness
在Scale获得输入焦点的时候,显示的获得焦点时颜色,失去焦点时颜色和边框的宽度。需要设置takefocus=1,同时使用Tab键,让Scale控件获得输入焦点。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length
=200,orient=tk.HORIZONTAL,takefocus=1,
highlightcolor='red',
highlightbackground='blue',
highlightthickness=10)
b1.pack()
tk.Entry(root).pack()
root.mainloop()
结果:
12.1.12 label
显示提示信息,可以用来表示此Scale控件是做什么用的。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,label='数值')
b1.pack()
root.mainloop()
结果:
12.1.13 length
Scale控件的长度。单位是像素。这个就是Scale控件在屏幕上显示的长度。
12.1.14 orient
设置Scale的类型,有水平和垂直两种。
12.1.15 relief
Scale的3D外观。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,
relief='groove')
b1.pack()
root.mainloop()
结果:
12.1.16 repeatdelay
定义滑块开始连续移动的延迟时间,单位时毫秒,默认值是300。当鼠标在滑动槽按下并保持,到滑块开始连续移动的时间间隔就是repeatdelay。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,
repeatdelay=1000)
b1.pack()
root.mainloop()
12.1.17 repeatinterval
当滑块开始移动后,滑块每次移动之间的时间间隔是repeatinterval来定义的。默认值是100,单位是毫秒。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,
repeatdelay=2000,
repeatinterval=500)
b1.pack()
root.mainloop()
说明:repeatdelay是滑块开始连续移动前的时间间隔,而repeatinterval是滑块开始连续移动后的时间间隔。
12.1.18 resolution
滑块移动的粒度,就是每次移动数值的变化。默认值是1,也可以定义为其他的数值,比如0.1等。
12.1.19 showvalue
是否显示当前的数值。如果showvalue=False,则不再显示数值。showvalue=True,会在滑动槽的上方(水平Scale)或者左边(垂直Scale)显示数值。默认是显示数值。
12.1.20 sliderlength
滑块的大小。默认值是30。单位是像素。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,
sliderlength=100)
b1.pack()
root.mainloop()
结果:
12.1.21 sliderrelief
定义滑块的3D效果。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,
sliderrelief='groove')
b1.pack()
root.mainloop()
结果:
12.1.22 state
定义Scale控件的状态。有三种:NORMAL,DISABLED,ACTIVE
12.1.23 takefocus
是否可以通过Tab键获得输入焦点。
12.1.24 tickinterval
显示刻度,并定义刻度的粒度。比如例子中用的是20。如果刻度过细,可能导致刻度重叠显示而看不清。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,
tickinterval=20)
b1.pack()
root.mainloop()
结果:
12.1.25 troughcolor
设置滑动槽的背景颜色。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,
troughcolor='red')
b1.pack()
root.mainloop()
结果:
12.1.26 variable
定义与Scale控件关联的变量,可以是IntVar(),DoubleVar()和StringVar()。可以通过关联的变量获取Scale的当前数值,以及设置Scale的数值。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
value=tk.StringVar()
v=tk.StringVar()
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,variable=value)
b1.pack()
b3=tk.Entry(root,textvariable=v)
def set1():
value.set(b3.get())
def get():
v.set(value.get())
b2=tk.Button(root,text='Set',command=set1)
b2.pack()
b4=tk.Button(root,text='Get',command=get)
b4.pack()
b3.pack()
root.mainloop()
结果:
12.1.27 width
设置Scale的宽度。默认是16。
import tkinter as tk
root=tk.Tk()
root.geometry('300x240')
b1=tk.Scale(root,length=200,
orient=tk.HORIZONTAL,width=50)
b1.pack()
root.mainloop()
结果: