文章目录
Scale 的数值输入控制
Scale 的基本概念
Scale 可以翻译为尺度。Python的tkinter模块中有 Widget控件Scale,这是一种图形接口输入功能,我们可以移动尺度条
产生某一范围的数字
建立尺度条的方法是Scale(),它的构造方法如下:
Scale(父对象, options, ...)
参数:
- 第一个参数:
父对象
,表示这个尺度条将建立在哪一个窗口内 - 第二个参数:
options
,参数如下
参数 | 含义 |
---|---|
activebackground | 鼠标光标在尺度条上时的背景颜色 |
borderwidth | 3D边界宽度 默认是两个像素 |
bd | 3D边界宽度 默认是两个像素 |
bg | 背景颜色 |
command | 当使用者更改数值时,会自动执行此方法 |
cursor | 当鼠标光标在尺度条上时的形状 |
fg | 文字前景色彩 |
font | 字形 |
from_ | 尺度条范围值的初值 |
highlightbackground | 当尺度条获取焦点时的背景颜色 |
highlightcolor | 当尺度条取得焦点时的颜色 |
label | 如果尺度条是水平的,则此标签出现在左上角,如果尺度条是垂直的,则此标签出现在右上角 默认是没有标签文字 |
length | 默认是100像素 |
orient | 可以设置水平HORIZONTAL或者垂直VERTICAL 默认是水平 |
relief | 可由此更改边界外观 默认是FLAT |
repeatdelay | 可设置需要按住尺度条多久后才可移动此尺度条 单位是ms 默认是300 |
resolution | 每次更改的数值(相当于每次可以移动的步长) 例如, from_ =2.0, to=4.0,如果将resolution设为0.5,则尺度可能数值是2.0、2.5、3.0、3.5、4.0 |
showvalue | 正常会显示尺度条的目前值,如果设为0则不显示 |
state | 若设置为DISABLED,则暂时无法使用此Scale |
takefocus | 正常时此尺度条可以循环取得焦点,如果设为0则无法取得焦点 |
tickinterval | 尺度条的标记刻度 例如,from_=2.0,to=3.0, tickinterval=0.25,则刻度是2.0、2.25、2.50、2.75和3.0 |
to | 尺度条范围值的末端值 |
throughcolor | 槽(trough) 的颜色 |
variable | 设置或取得目前选取的尺度值,它的值类型通常是IntVar或StringVar |
width | 对于垂直尺度条这是槽的宽度,对于水平尺度条这是槽的高度 |
Scale 的基本运用
例子
:
import tkinter
root = tkinter.Tk()
scale1 = tkinter.Scale(root, from_=0, to=10).pack()
# length 水平尺度条的宽度
scale2 = tkinter.Scale(root, from_=0, to=10, length=300, orient=tkinter.HORIZONTAL).pack()
root.mainloop()
运行结果:
例子
:
import tkinter
root = tkinter.Tk()
scale1 = tkinter.Scale(root,
from_=0, # 起点值
to=10, # 终点值
troughcolor="lightyellow", # 槽的颜色
width="30", # 槽的高度
tickinterval=2, # 刻度
label="刻度尺", # 标签
length=300, # 长度
orient=tkinter.HORIZONTAL) # 水平
scale1.pack()
root.mainloop()
运行结果:
取得与设置Scale 的尺度值
使用get()方法取得尺度值,使用set()方法设置尺度值
例子
:
import tkinter
def show():
print("垂直尺度值 = {}\n水平尺度值 = {}".format(scale1.get(), scale2.get()))
root = tkinter.Tk()
scale1 = tkinter.Scale(root,
from_=0, # 起点值
to=10, # 终点值
troughcolor="lightyellow", # 槽的颜色
width="20", # 槽的高度
tickinterval=2, # 刻度
label="刻度尺", # 标签
length=200) # 长度
scale1.pack()
scale2 = tkinter.Scale(root,
from_=0, # 起点值
to=10, # 终点值
troughcolor="lightyellow", # 槽的颜色
width="20", # 槽的高度
tickinterval=2, # 刻度
label="刻度尺", # 标签
length=200, # 长度
orient=tkinter.HORIZONTAL) # 水平
scale2.pack()
button = tkinter.Button(root, text="cheak this", command=show)
button.pack()
root.mainloop()
运行结果:
使用 Scale 设置窗口背景颜色
Scale 控件有一个特点就是在移动时可以自动触发时间
def show():
pass
scale = Scale(..., command=show)
例子
:
import tkinter
def show(source):
# source 用于接收Scale 传回来的参数
red = rSlider.get()
green = gSlider.get()
blue = bSlider.get()
myColor = "#%02x%02x%02x" % (red, green, blue) # %02x 转成16进制,字母小写空缺补零
root.config(bg=myColor)
root = tkinter.Tk()
root.geometry("300x200")
rSlider = tkinter.Scale(root, from_=0, to=255, command=show)
gSlider = tkinter.Scale(root, from_=0, to=255, command=show)
bSlider = tkinter.Scale(root, from_=0, to=255, command=show)
rSlider.grid(row=0, column=0)
gSlider.grid(row=0, column=1)
bSlider.grid(row=0, column=2)
root.mainloop()
运行结果:
askcolor() 方法
在tkinter 模块内的 colorchooser 模块内有askcolor() 方法,这个方法可以开启色彩
对话框,让我们可以很方便的在此对话框中选择我们需要的色彩
例子
:
import tkinter
from tkinter.colorchooser import *
def colorChoose():
mycolor = askcolor()
print(type(mycolor), mycolor)
root.config(bg=mycolor[1])
root = tkinter.Tk()
root.geometry("300x200")
button = tkinter.Button(root, text="Select Color", command=colorChoose)
button.pack()
root.mainloop()
运行结果:
type类型为
<class 'tuple'> ((255.99609375, 128.5, 0.0), '#ff8000')
容器的应用
我们可以使用Frame框架当做容器,将三个色彩尺度条放在此框架内,方便我们去移动或者去管理
例子
:
import tkinter
def show(source):
# source 用于接收Scale 传回来的参数
red = rSlider.get()
green = gSlider.get()
blue = bSlider.get()
myColor = "#%02x%02x%02x" % (red, green, blue) # %02x 转成16进制,字母小写空缺补零
root.config(bg=myColor)
root = tkinter.Tk()
root.geometry("300x200")
frame = tkinter.Frame(root)
frame.pack()
rSlider = tkinter.Scale(frame, from_=0, to=255, command=show)
gSlider = tkinter.Scale(frame, from_=0, to=255, command=show)
bSlider = tkinter.Scale(frame, from_=0, to=255, command=show)
rSlider.grid(row=0, column=0)
gSlider.grid(row=0, column=1)
bSlider.grid(row=0, column=2)
root.mainloop()
运行结果:
Spinbox 控件
Spinbox 控件基本概念
Spinbox 控件也是一种输入控件,其实它是一种Entry和 Button的组合体,他允许用户用鼠标单击up/down
按钮,或者是按上箭头/下箭头
达到在某一数值区间内增加数值与减少数值的目的。另外,也可以在此直接输入数值
构造方法如下:
Spinbox(父对象, options, ...)
参数:
- 第一个参数:
父对象
,表示这个Spinbox将建立在哪一个窗口内 - 第二个参数:
options
,参数如下
参数 | 含义 |
---|---|
activebackground | 鼠标光标在Spinbox 控件上时的背景颜色 |
borderwidth | 3D边界宽度 默认是两个像素 |
bd | 3D边界宽度 默认是两个像素 |
bg | 背景颜色 |
command | 当使用者更改选项时,会自动执行此方法 |
cursor | 当鼠标光标在Spinbox 控件上时的形状 |
disablebackground | 在Disabled状态时的背景颜色 |
disableforeground | 在Disabled状态时的前景颜色 |
fg | 文字前景色彩 |
font | 字形 |
format | 格式化的字符串 |
from_ | 范围值的初值 |
increment | 每次单击up/down按钮的增值或减值的量 |
justify | 在有多行文本时,最后一行的对齐方式 可取值有LEFT/CENTER/RIGHT(靠左/居中/靠右) 默认是居中对齐 |
relief | 可由此更改边界外观 默认是FLAT |
repeatdelay | 可设置单击up/down按钮变换数字的间隔时间。单位是ms 默认是300 |
state | 若设置为DISABLED,则暂时无法使用此Spinbox 默认是NORMAL,也可以设置READONLY |
textvariable | 可以设置以变量方式显示 |
values | 可以是元组或其他序列值 |
to | 范围值的末端值 |
width | 对于垂直尺度条这是槽的宽度,对于水平尺度条这是槽的高度 |
wrap | 单击up/down按钮可以让数值重新开始 |
xscrollcommand | 在x轴使用滚动条 |
Spinbox 控件基本运用
例子
:
import tkinter
root = tkinter.Tk()
root.geometry("200x80")
spinbox = tkinter.Spinbox(root, from_=10, to=30, increment=2)
spinbox.pack(padx=5, pady=20)
root.mainloop()
运行结果:
备注:如果想要用上箭头/下箭头键更改数值时,需先将插入点放在数值区,也就是输入时闪烁的光标
get() 方法的应用
可以使用get()方法取得目前Spinbox 的值
例子
:
import tkinter
def printNum():
print(spinbox.get())
root = tkinter.Tk()
root.geometry("200x80")
spinbox = tkinter.Spinbox(root, from_=10, to=30, command=printNum)
spinbox.pack(padx=5, pady=20)
root.mainloop()
运行结果:
以序列存储 Spinbox的数值数据
其实在使用 Spinbox 时也可以不设置初值和终值, 而是将数值存储在序列数据中。
例如,元组或列表内,当单击上箭头/下箭头按钮时,相当于是观察元组或列表内索引(index)内的值
例子
:
import tkinter
def printNum():
print(spinbox.get())
root = tkinter.Tk()
root.geometry("200x80")
spinbox = tkinter.Spinbox(root, values=(1, 3, 5, 7, 9), command=printNum)
spinbox.pack(padx=5, pady=20)
root.mainloop()
运行结果:
因为元组内容是(1, 3, 5, 7, 9),所以程序启动后出现的值是1,第1次单击按钮时的值是3, 第2次单击按钮时的值是5
非数值数据
可以使用列表或元组存储序列资料,其实应用在Spinbox内可以是数值数据也可以是非数值数据,例如,字符串
例子
:
import tkinter
def printNum():
print(spinbox.get())
foods = ("饺子", "汤圆", "春卷", "油条", "面窝", "热干面")
root = tkinter.Tk()
root.geometry("200x80")
spinbox = tkinter.Spinbox(root, values=foods, command=printNum)
spinbox.pack(padx=5, pady=20)
root.mainloop()
运行结果:
谢谢观看,笔者会持续更新,如有错误或者建议,请私信我