前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【tkinter系列 第七课 Scale部件 】

【tkinter系列 第七课 Scale部件 】

作者头像
叶子陪你玩
发布2020-03-12 15:20:09
2.2K0
发布2020-03-12 15:20:09
举报
前言

python中通常我们写程序,显示结果和操作都是在终端区,如果要想实现一个有显示界面的程序那该怎样实现呢?python中有好几个库都可以实现,这个系列我们一起来学习如何使用python自带的tkinter库来实现。

本节课将要学习Scale窗口部件,Scale是范围的意思,这个部件可以叫做尺度条或者拉动条,那什么时候该用Scale部件呢?通常是在当你需要使用滑块来控制某个数值时,这个就非常方便,这个控件解决了用户一个问题,用户不需要去判断输入的内容是否合规问题,在控件上直接滑动滑块就可以了。

显示控件

代码:

代码语言:javascript
复制
from tkinter import *
import tkinter.messagebox
#创建一个主窗口
root = Tk()
# 创建 宽400高250的窗口 x是小写的英文字符
root.geometry('400x250')
# 创建scale部件1
w = Scale(root, from_=0, to=100)
w.pack()
# 创建scale部件2
w = Scale(root,
        from_=0, # 起始值
        to=200, # 结束值
        tickinterval=40,  # 刻度值 每隔40显示一个值,实际会受步距值影响
        sliderlength=20,  # 滑块按钮的长度
        length=250, # scale部件的外观长度
        resolution=20, # 步距值 移动滑块一次数值改变20
        orient=HORIZONTAL, # 水平放置控件
   )
w.pack()
# 程序一直循环,直到我们关闭窗口
root.mainloop()

效果:

功能实现

接下来实现一个小案例,通过控制两个scale部件,实现对label的字体大小和内容的改变。

第一步:部件布局

代码:

代码语言:javascript
复制
from tkinter import *
import tkinter.messagebox
#创建一个主窗口
root = Tk()
# 创建 宽400高250的窗口 x是小写的英文字符
root.geometry('400x250')
# 设置背景为red,字体为Arial,大小为16
l=Label(root,text="原始值:0",bg="red",font=('Arial',16))
l.pack()
w1 = Scale(root,
        from_=10, # 起始值
        to=50, # 结束值
        tickinterval=10,  # 刻度值 每隔10显示一个值,实际会受步距值影响
        sliderlength=20,  # 滑块按钮的长度
        length=200, # scale部件的外观长度
        resolution=10, # 步距值 移动滑块一次数值改变10
        orient=HORIZONTAL,# 水平放置控件
   )
w1.pack()
# 程序一直循环,直到我们关闭窗口
root.mainloop()

效果:

第二步:给控件添加一个方法

代码:

代码语言:javascript
复制
from tkinter import *
import tkinter.messagebox
#创建一个主窗口
root = Tk()
# 创建 宽400高250的窗口 x是小写的英文字符
root.geometry('400x250')
# 添加一个改变标签内容的方法
# 当scale控件滑块变化,会传入一个v变量,名字可以随便取
def change_label(v):
    l.config(text="当前数值:"+ v)
# 设置背景为red,字体为Arial,大小为16
l=Label(root,text="原始值:0",bg="red",font=('Arial',16))
l.pack()
w1 = Scale(root,
        from_=10, # 起始值
        to=50, # 结束值
        tickinterval=10,  # 刻度值 每隔10显示一个值,实际会受步距值影响
        sliderlength=20,  # 滑块按钮的长度
        length=200, # scale部件的外观长度
        resolution=10, # 步距值 移动滑块一次数值改变10
        orient=HORIZONTAL,# 水平放置控件
        command=change_label #绑定一个方法
   )
w1.pack()
# 程序一直循环,直到我们关闭窗口
root.mainloop()

效果:

解释:

这里代码添加了一个方法,同时给scale设置了一个command的属性,绑定了这个方法;这里在绑定方法时可能会有疑问,为啥么绑定的时候并没有传入参数,但是实际的函数却又有参数。

实际上Scale部件当绑定方法时是会默认将当前的 刻度值传递到函数里面去的,并且它的数据类型是字符类型的,具体可以使用type来打印查看一下。

拓展知识:

这里除了使用上面的方法,还可以用下面的方法,scale控件还有一个get的方法,可以获取当前控件的一个值,使用这个方法,原来的变量就可以不使用了,但是变量不能删除,函数格式要求是要传入变量的。

同时要注意这种方法获取的是数字类型,所以设置文本值时还需要使用str将类型进行转换。

第三步:改变文字大小

代码:

代码语言:javascript
复制
from tkinter import *
import tkinter.messagebox
#创建一个主窗口
root = Tk()
# 创建 宽400高250的窗口 x是小写的英文字符
root.geometry('400x250')
def change_label(v):
    value=w1.get()
    font_size=w2.get()
    l.config(text="当前数值:" + str(value),font=('Arial',font_size))

# 设置背景为red,字体为Arial,大小为16
l=Label(root,text="原始值:0",bg="red",font=('Arial',16))
l.pack()
w1 = Scale(root,
        label="设置内容",# 给控件设置标签内容
        from_=10, # 起始值
        to=50, # 结束值
        tickinterval=10,  # 刻度值 每隔10显示一个值,实际会受步距值影响
        sliderlength=20,  # 滑块按钮的长度
        length=200, # scale部件的外观长度
        resolution=10, # 步距值 移动滑块一次数值改变10
        orient=HORIZONTAL,# 水平放置控件
        command=change_label
   )
w1.pack()
w2 = Scale(root,
           label="设置字体大小",  # 给控件设置标签内容
           from_=10,  # 起始值
           to=30,  # 结束值
           length=200,  # scale部件的外观长度
           orient=HORIZONTAL,  # 水平放置控件
           command=change_label
           )
w2.pack()
# 程序一直循环,直到我们关闭窗口
root.mainloop()

效果:

解释:

这里新增了一个scale控件,同时给两个控件都加上了一个label属性,让我们清晰每一个控件的作用。

这里为了方便直接调用了同一个方法,一个改变内容,一个改变大小,这里可以看到我用的都是get的方法,因为通过这个方法可以区分开两个控件的变量;

但是还是有一个问题,大小和内容是用一个config方法配置的,所以不管先改变哪一个控件,标签的内容或者大小都会变成当前控件的初始值。

第四步:完善代码

要想比较完美一点,可以分开写两个方法。

代码:

代码语言:javascript
复制
from tkinter import *
import tkinter.messagebox
#创建一个主窗口
root = Tk()
# 创建 宽400高250的窗口 x是小写的英文字符
root.geometry('400x250')
def change_text(v):
    l.config(text="当前数值:" + v)
def change_font_size(v):
    l.config(font=('Arial', int(v)))
# 设置背景为red,字体为Arial,大小为16
l=Label(root,text="原始值:0",bg="red",font=('Arial',16))
l.pack()
w1 = Scale(root,
        label="设置内容",# 给控件设置标签内容
        from_=10, # 起始值
        to=50, # 结束值
        tickinterval=10,  # 刻度值 每隔10显示一个值,实际会受步距值影响
        sliderlength=20,  # 滑块按钮的长度
        length=200, # scale部件的外观长度
        resolution=10, # 步距值 移动滑块一次数值改变10
        orient=HORIZONTAL,# 水平放置控件
        command=change_text
   )
w1.pack()
w2 = Scale(root,
           label="设置字体大小",  # 给控件设置标签内容
           from_=10,  # 起始值
           to=30,  # 结束值
           length=200,  # scale部件的外观长度
           orient=HORIZONTAL,  # 水平放置控件
           command=change_font_size
           )
w2.pack()
# 程序一直循环,直到我们关闭窗口
root.mainloop()

效果:

解释:

这里将两个方法改了一下,同时绑定的名称也对应更改。

代码语言:javascript
复制
def change_text(v):
    l.config(text="当前数值:" + v)
def change_font_size(v):
    l.config(font=('Arial', int(v)))

参考:http://effbot.org/tkinterbook/scale.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本节课将要学习Scale窗口部件,Scale是范围的意思,这个部件可以叫做尺度条或者拉动条,那什么时候该用Scale部件呢?通常是在当你需要使用滑块来控制某个数值时,这个就非常方便,这个控件解决了用户一个问题,用户不需要去判断输入的内容是否合规问题,在控件上直接滑动滑块就可以了。
    • 显示控件
      • 功能实现
        • 第一步:部件布局
        • 第二步:给控件添加一个方法
        • 第三步:改变文字大小
        • 第四步:完善代码
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档