Tkinter保姆级教程(上)(二)

简介: Tkinter保姆级教程(上)

Entry输入控件

Entry 控件是 Tkinter GUI 编程中的基础控件之一,它的作用就是允许用户输入内容,从而实现 GUI 程序与用户的交互,比如当用户登录软件时,输入用户名和密码,此时就需要使用 Entry 控件。Entry 控件使用起来非常简单,下面对该控件做简单的介绍。基本语法格式如下:

tk_entry = Entry( master, option, ... )

基本属性

Entry 控件除了具备一些共有属性之外,还有一些自身的特殊属性,如下表所示:


属性名称 说明
exportselection 默认情况下,如果在输入框中选中文本会复制到粘贴板,如果要忽略这个功能,可以设置为 exportselection=0
selectbackground 选中文字时的背景颜色
selectforeground 选中文字时的前景色
show 指定文本框内容以何种样式的字符显示,比如密码可以将值设为 show="*"
textvariable 输入框内值,也称动态字符串,使用 StringVar() 对象来设置,而 text 为静态字符串对象
xscrollcommand 设置输入框内容滚动条,当输入的内容大于输入框的宽度时使用户

动态数据类型


上述表格中提及了 StringVar() 方法,和其同类的方法还有 BooleanVar()、DoubleVar()、IntVar() 方法,不难看出他们分别代表一种数据类型,即字符串、布尔值、浮点型、整型,这些方法并不属于 Python 内置方法,而是 Tkinter 特有的方法。在界面编程的过程中,有时我们需要“动态跟踪”一些变量值的变化,从而保证值的变换及时的反映到显示界面上,但是 Python 内置的数据类型是无法这一目的的,因此使用了 Tcl 内置的对象,我们把这些方法创建的数据类型称为“动态类型”,比如 StringVar() 创建的字符串,称为“动态字符串”。

下面通过一个时钟示例对“动态字符串”做进一步了解,代码如下:



常用方法


除了一些基本的属性之外,Entry 控件还提供了一些常用的方法,如下所示:

方法 说明
delete() 根据索引值删除输入框内的值
get() 获取输入框内的是
set() 设置输入框内的值
insert() 在指定的位置插入字符串
index() 返回指定的索引值
select_clear() 取消选中状态
select_adujst() 确保输入框中选中的范围包含 index 参数所指定的字符,选中指定索引和光标所在位置之前的字符
select_from (index) 设置一个新的选中范围,通过索引值 index 来设置
select_present() 返回输入框是否有处于选中状态的文本,如果有则返回 true,否则返回 false。
select_to() 选中指定索引与光标之间的所有值
select_range() 选中指定索引与光标之间的所有值,参数值为 start,end,要求 start 必须小于 end。


注意:在 Entry 控件中,我们可以通过以下方式来指定字符的所在位置:


数字索引:表示从 0 开始的索引数字;

"ANCHOE":在存在字符的情况下,它对应第一个被选中的字符;

"END":对应已存在文本中的最后一个位置;

"insert(index,'字符'):将字符插入到 index 指定的索引位置。

示例如下:


import tkinter as tk
win = tk.Tk()
# 设置主窗口
win.geometry('250x100')
win.title("艾派森")
win.iconbitmap('favicon.ico')
win.resizable(0,0)
# 创建输入框控件
entry1 = tk.Entry(win)
# 放置输入框,并设置位置
entry1.pack(padx=20, pady=20)
entry1.delete(0, "end")
# 插入默认文本
entry1.insert(0,'百度网址:www.baidu.com')
# 得到输入框字符串
print(entry1.get())
# 删除所有字符
# entry1.delete(0, tk.END)
win.mainloop()



Entry控件验证功能


Entry 控件也提供了对输入内容的验证功能,比如要求输入英文字母,你却输入了数字,这就属于非法输入,Entry 控件通过以下参数实现对内容的校验:

参数 说明
validate 指定验证方式,字符串参数,参数值有 focus、focusin、focusout、key、all、none。 
validatecommand 指定用户自定义的验证函数,该函数只能返回 True 或者 Fasle
invalidcommand 当 validatecommand 指定的验证函数返回 False 时,可以使用该参数值再指定一个验证函数。

下面对 validate 的参数值做简单的介绍:

参数值 说明
focus 当 Entry 组件获得或失去焦点的时候验证
focusin 当 Entry 组件获得焦点的时候验证
focuson 当 Entry 组件失去焦点的时候验证
key 当输入框被编辑的时候验证
all 当出现上边任何一种情况的时候验证
none  默认不启用验证功能,需要注意的是这里是字符串的 'none'


下面看一组具体的运行示例:


import tkinter as tk
from tkinter import messagebox
win = tk.Tk()
# 设置主窗口
win.geometry('250x200+250+200')
win.title("艾派森")
win.iconbitmap('favicon.ico')
win.resizable(0,0)
# 创建验证函数
def check():
    if entry1.get() == "艾派森":
        messagebox.showinfo(title='温馨提示',message="输入正确")
        return True
    else:
        messagebox.showwarning(title='温馨提示',message="输入不正确")
        entry1.delete(0,tk.END)  # 删除输入框中的值
        return False
# 新建文本标签
labe1 = tk.Label(win,text="账号:")
labe2 = tk.Label(win,text="密码:")
labe1.grid(row=0)
labe2.grid(row=1)
# 创建动字符串
Dy_String = tk.StringVar()
# 使用验证参数 validata,参数值为 focusout 当失去焦点的时候,验证输入框内容是否正确
entry1 = tk.Entry(win,textvariable =Dy_String,validate ="focusout",validatecommand=check)
entry2 = tk.Entry(win)
# 对控件进行布局管理,放在文本标签的后面
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)
win.mainloop()



Spinbox 高级输入框


Spinbox 是 Entry 控件的升级版,它是 Tkinter 8.4 版本后新增的控件,该控件不仅允许用户直接输入内容,还支持用户使用微调选择器(即上下按钮调节器)来输入内容。在一般情况下,Spinbox 控件用于在固定的范围内选取一个值的时候使用。下面看一组简单的应用示例:

import tkinter as tk
root = tk.Tk()
root.title("艾派森")
root.geometry('300x200+300+300')
root.iconbitmap('favicon.ico')
# 如果是数字使用 from_和to参数,范围 0-20,并且与2步长递增或递减
w = tk.Spinbox(root,from_=0,to=20, increment=2,width = 15,bg='#9BCD9B')
w.pack()
# 显示窗口
root.mainloop()


若不是数字,而是字符串形式的选项值,则采用values参数以元组的形式进行传参,如下所示:

import tkinter as tk
root = tk.Tk()
root.title("艾派森")
root.geometry('300x200+300+300')
root.iconbitmap('favicon.ico')
# 使用values传递即可
w = tk.Spinbox(root,values=['python','c++','java'])
w.pack()
# 显示窗口
root.mainloop()


Text 文本控件

是 Tkinter 中经常使用的控件,与 Entry 控件相比,Text 控件用于显示和编辑多行文本,而 Entry 控件则适合处理单行文本。Text 控件类似 HTML 中的<textarea>标签,允许用户以不同的样式、属性来显示和编辑文本,它可以包含纯文本或者格式化文本,同时支持嵌入图片、显示超链接以及带有 CSS 格式的 HTML 等。Text 控件的有很多的适用场景,比如显示某个产品的详细信息,或者人物介绍等。下面我们对 Text 控件属性和常用方法做简单的介绍。


基本属性


除了基本的共有属性之外,Text 控件还具备以下属性:


属性 说明
autoseparators 默认为 True,表示执行撤销操作时是否自动插入一个“分隔符”(其作用是用于分隔操作记录)
exportselection 默认值为 True,表示被选中的文本是否可以被复制到剪切板,若是 False 则表示不允许。
insertbackground 设置插入光标的颜色,默认为 BLACK
insertborderwidth 设置插入光标的边框宽度,默认值为 0
insertofftime 该选项控制光标的闪烁频频率(灭的状态)
insertontime 该选项控制光标的闪烁频频率(亮的状态)
selectbackground 指定被选中文本的背景颜色,默认由系统决定
selectborderwidth 指定被选中文本的背景颜色,默认值是0
selectforeground 指定被选中文本的字体颜色,默认值由系统指定
setgrid 默认值是 False,指定一个布尔类型的值,确定是否启用网格控制
spacing1 指定 Text 控件文本块中每一行与上方的空白间隔,注意忽略自动换行,且默认值为 0。
spacing2 指定 Text 控件文本块中自动换行的各行间的空白间隔,忽略换行符,默认值为0
spacing3 指定 Text 组件文本中每一行与下方的空白间隔,忽略自动换行,默认值是 0
tabs 定制 Tag 所描述的文本块中 Tab 按键的功能,默认被定义为 8 个字符宽度,比如 tabs=('1c', '2c', '8c') 表示前 3 个 Tab 宽度分别为 1厘米,2厘米,8厘米。
undo 该参数默认为 False,表示关闭 Text 控件的“撤销”功能,若为 True 则表示开启
wrap 该参数用来设置当一行文本的长度超过 width 选项设置的宽度时,是否自动换行,参数值 none(不自动换行)、char(按字符自动换行)、word(按单词自动换行)
xscrollcommand 该参数与 Scrollbar 相关联,表示沿水平方向上下滑动
yscrollcommand 该参数与 Scrollbar 相关联,表示沿垂直方向左右滑动

基本方法


Text 中的方法有几十个之多,这里不进行一一列举,主要对常用的方法进行介绍,如下表所示:


方法 说明
bbox(index) 返回指定索引的字符的边界框,返回值是一个 4 元组,格式为(x,y,width,height)
edit_modified() 该方法用于查询和设置 modified 标志(该标标志用于追踪 Text 组件的内容是否发生变化)
edit_redo() “恢复”上一次的“撤销”操作,如果设置 undo 选项为 False,则该方法无效。
edit_separator() 插入一个“分隔符”到存放操作记录的栈中,用于表示已经完成一次完整的操作,如果设置 undo 选项为 False,则该方法无效。
get(index1, index2) 返回特定位置的字符,或者一个范围内的文字。
image_cget(index, option) 返回 index 参数指定的嵌入 image 对象的 option 选项的值,如果给定的位置没有嵌入 image 对象,则抛出 TclError 异常
image_create() 在 index 参数指定的位置嵌入一个 image 对象,该 image 对象必须是 Tkinter 的 PhotoImage 或 BitmapImage 实例。
insert(index, text) 在 index 参数指定的位置插入字符串,第一个参数也可以设置为 INSERT,表示在光标处插入,END 表示在末尾处插入。
delete(startindex [, endindex]) 删除特定位置的字符,或者一个范围内的文字。
see(index) 如果指定索引位置的文字是可见的,则返回 True,否则返回 False。

下面来一个小案例:

from tkinter import *
win = Tk()
win.title("艾派森")
win.iconbitmap('favicon.ico')
win.geometry('400x300')
# 创建一个文本控件
# width 一行可见的字符数;height 显示的行数
text = Text(win, width=50, height=20, undo=True, autoseparators=False)
text.grid()
# INSERT 光标处插入;END 末尾处插入
text.insert(INSERT, '恭喜你,发现了宝藏文章!')
# 定义撤销和恢复方法,调用edit_undo()和 edit_redo()方法
def backout():
    text.edit_undo()
def regain():
    text.edit_redo()
# 定义撤销和恢复按钮
Button(win,text = '撤销',command = backout).grid(row=3, column=0, sticky="w", padx=10, pady=5)
Button(win,text = '恢复',command = regain).grid(row=3, column=0, sticky="e", padx=10, pady=5)
win.mainloop()



注意:点击“撤销”按钮后输入的所有语句都会被删除,如果再点击“恢复”按钮,刚刚删除的内容又会恢复。


目录
相关文章
|
8月前
|
Python
经典 90 坦克大战 Python 版实现(支持单双人模式)
经典 90 坦克大战 Python 版实现(支持单双人模式)
100 0
经典 90 坦克大战 Python 版实现(支持单双人模式)
|
数据挖掘 索引 Python
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—NumPy—Numpy 高级—训练场(1)(十一)
你好,感谢你能点进来本篇博客,请不要着急退出,相信我,如果你有一定的 Python 基础,想要学习 Python数据分析的三大库:numpy,pandas,matplotlib;这篇文章不会让你失望,本篇博客是 【AIoT阶段一(下)】 的内容:Python数据分析,
438 0
数据分析三剑客【AIoT阶段一(下)】(十万字博文 保姆级讲解)—NumPy—Numpy 高级—训练场(1)(十一)
|
5月前
|
存储 JSON 搜索推荐
【测试平台系列】第一章 手撸压力机(十二)-初步实现提取功能
上一章节,我们主要实现了基础的并发测试场景的能力。本章节,我们实现一下,如何对响应进行提取,使用正则/json对响应信息提取,并赋值给我们定义的变量。
|
5月前
|
测试技术
【测试平台系列】第一章 手撸压力机(十)-定义场景
上一章,咱们对http请求进行了一些优化,本章节我们将组成场景去运行。首先场景就是一连串的http接口的请求,我们使用list(列表)来组装成一个场景
【测试平台系列】第一章 手撸压力机(十)-定义场景
|
11月前
|
运维 程序员 开发者
安装python详细步骤(超详细,保姆级,一步一图)
安装python详细步骤(超详细,保姆级,一步一图)
149 0
|
11月前
|
数据安全/隐私保护 Python
tkinter 模块的最强辅助模块 —— tkintertools(万字详解)(三)
tkinter 模块的最强辅助模块 —— tkintertools(万字详解)(三)
185 0
|
11月前
|
前端开发 Python 容器
tkinter 模块的最强辅助模块 —— tkintertools(万字详解)(一)
tkinter 模块的最强辅助模块 —— tkintertools(万字详解)(一)
117 0
|
11月前
|
前端开发 Python
tkinter 模块的最强辅助模块 —— tkintertools(万字详解)(四)
tkinter 模块的最强辅助模块 —— tkintertools(万字详解)(四)
155 0
|
Java C++ 索引
Tkinter保姆级教程(上)(三)
Tkinter保姆级教程(上)
184 0
Tkinter保姆级教程(上)(三)
|
Python 容器
Tkinter保姆级教程(下)(二)
Tkinter保姆级教程(下)
408 0
Tkinter保姆级教程(下)(二)