Python之tkinter Scale尺度条 与 Spinbox 输入控件

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()

运行结果:
在这里插入图片描述

谢谢观看,笔者会持续更新,如有错误或者建议,请私信我

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章