Python tkinter(4)输入框控件

目录

  • 引入
  • 创建一个输入框
  • 输入框的属性
    • 颜色
    • 字体
    • 长度
    • 光标
    • 状态
    • 边框
    • 显示的字符
    • 对齐方式
    • 光标闪烁和粗细
  • 修改属性
  • 方法
    • 插入内容
    • 获取内容
    • 删除内容
    • 移动光标
    • 选中内容
  • 总结

引入

优秀的tkinter库还有那些控件呢?这期我们就来看看输入框吧!

创建一个输入框

先制作一个窗口,然后把输入框黏上去。

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry(root) #创建一个输入框
entry.pack() #把输入框放到窗口上去
root.mainloop()

==放一个图片!==

输入框的属性

颜色

输入框可以改变它的颜色。颜色包括字体颜色(fgforeground)、背景颜色(bgbackground)、选中时的高亮颜色(selectbackground)和选中时的字体颜色( selectforeground)。

颜色可以用英语单词(如"red""blue")来表示,也可以用HEX格式的颜色(如"#ff00ff""#abcd00")。

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry(root,fg="red",bg="blue",selectbackground="black",selectforeground="white")
#创建一个输入框,正常时蓝底红字,被选中的内容黑底白字
entry.pack() #把输入框放到窗口上去
root.mainloop()

字体

还可以设置输入框的字体。比如,我喜欢宋体字,希望字体大一点,并且是斜体。

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry(root,font=("宋体",25,"italic"))
#创建一个输入框,字体为宋体,字号25,斜体
#若不需要设置字体大小和字体样式,也可以直接写为:
#entry = tkinter.Entry(root,font="宋体")
entry.pack() #把输入框放到窗口上去
root.mainloop()

而字体的样式除了有斜体之外,还有以下几种:

关键词样式样例
roman正体字
italic斜体字
bold粗体字
underline下划线
overstrike杠掉

长度

输入框只能设置其长度而不能设置其宽度。因此,如果你像这样:entry1 = tkinter.Entry(root,width=50,height=20),那么会报错。而长度并不是像素个数,而是一次性可现实的英文字母个数。也就是说,如果长度为50,那么在不左右滑动的情况下可以一下子显示约50个英文字母。

import tkinter
root = tkinter.Tk()
entry1 = tkinter.Entry(root,width=50) #长度约为50个英文字母
entry1.pack()
entry2 = tkinter.Entry(root,width=20) #长度约为20个英文字母
entry2.pack()
root.mainloop()

光标

光标有许多种样式。内容不少,这里就稍微介绍下吧,其余的内容我找时间再专门写一篇吧。

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry(root,cursor="crosshair") #光标放在输入框上后样式为十字准心
entry.pack() #把输入框粘到窗口上
root.mainloop()


默认鼠标样式是xterm(文本编辑,工字形),除此之外还有其它一些鼠标样式,如arrow等。

状态

一般的tkinter控件都有2个常用的状态:正常(Normal)、禁用(Disabled),还有一些不常用的,如只读(Readonly)、活动(Active),这里只介绍Disabled和Normal吧,因为另外两个实在太不常见了。

import tkinter
root = tkinter.Tk()
entry1 = tkinter.Entry(root,state=tkinter.DISABLED)
#禁用,无法点击也无法往里面输入内容,也无法从中复制内容
entry1.pack() 
entry2 = tkinter.Entry(root,state=tkinter.NORMAL)
#可以进行操作
entry2.pack() 
entry3 = tkinter.Entry(root,state="readonly")
#只能复制内容,而不可以输入内容。
#tkinter模块中,没有tkinter.READONLY 这个变量,所有就用字符串代替吧
entry3.pack()
root.mainloop()

边框

边框样式(relief)一共有这么几种:flatgrooveraisedridgesolidsunken,就一起来看看效果吧!

import tkinter
root = tkinter.Tk()
relief = ["flat","groove","raised","ridge","solid","sunken"] #不同的样式
for i in range(len(relief)):
    entry = tkinter.Entry(root,relief=relief[i]) #每个样式来一个输入框
    entry.place(x=5,y=i * 30) #把每个样式的输入框放在窗口上

root.mainloop()


有了边框样式,我们还可以设置边框的厚度:bdborderwidth

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry(root,bd=20) #厚厚的一层边框
entry.pack() #把输入框放在窗口上
root.mainloop()


结果就成这样了,这边框真感人!

显示的字符

如果你想创建一个密码输入框,那么你肯定希望输入的密码被显示为星星或圆点。关键就在于show属性,你想让它显示星星,就show="*",之后你又想让它显示原来的内容,就show=""

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry(root,show="*") #将输入的内容显示为"*"
#当然,你也可以将星星替换成你喜欢的字符
#如果想让输入框显示原来的内容,则可以:
#entry.configure(show="")
entry.pack()
root.mainloop()

对齐方式

在WPS中,文字排版有三种主要的方式:靠左、居中、靠右。其实Entry也有这三种,如示例:

import tkinter
root = tkinter.Tk()
entry1 = tkinter.Entry(root,justify=tkinter.RIGHT) #靠右
entry1.pack()
entry2 = tkinter.Entry(root,justify=tkinter.LEFT) #靠左
entry2.pack()
entry3 = tkinter.Entry(root,justify=tkinter.CENTER) #居中
entry3.pack()
root.mainloop()

光标闪烁和粗细

光标的闪烁速度可以被改变,使用属性insertontime,即光标显示的时间,和insertofftime,即光标隐藏的时间。

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry(root,insertofftime=100,insertontime=1000)
#输入的时候,每次光标闪烁,都显示1000毫秒(即1秒),隐藏100毫秒
entry.pack()
root.mainloop()

同时,还可以改变光标的粗细,那就是insertwidth属性。

import tkinter
root = tkinter.Tk()
entry1 = tkinter.Entry(root,insertwidth=1) #细细的光标,粗细为1
entry1.pack()
entry2 = tkinter.Entry(root,insertwidth=10) #粗细为10
entry2.pack()
root.mainloop()

修改属性

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry(root) #输入框
entry.pack() #把输入框贴在窗口上
entry.configure(font=("Consolas",50)) #将字体设置为Consolas,字体大小50,默认样式
#configure 和 config 都可以,
#entry.config(font=("Consolas",50)) 效果一样
root.mainloop()

方法

我们除了要给输入框各种属性,还需要对其进行操作。

插入内容

如果我们希望在输入框内插入内容,则可以使用insert()方法。具体如下:

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry()
entry.pack()
entry.insert(tkinter.END,"Hello World!!!")
#在输入框中文字的末尾添加字符串"Hello World!!!"
root.mainloop()

而除了tkinter.END,还可以是tkinter.INSERT。两者的区别在于,tkinter.END代表在文末添加字符串,而tkinter.INSERT代表在当前的光标位置添加字符串。

获取内容

当我们需要获取输入框中的内容,可以调用get()方法。

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry()
entry.pack()
entry.insert(tkinter.END,"Hello World!!!") #插入文本
get_something = entry.get() #获取输入框中的内容
print(get_something)
root.mainloop()

以上的程序会输出输入框中的内容,这里当然就是”Hello World!!!”啦。

删除内容

在这几种操作中,怎么能少了删除呢!要删除输入框中的内容,就调用delete()方法。

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry(root)
entry.pack()
entry.insert(tkinter.END,"Hello World!!!") #插入文本
entry.delete(0,tkinter.END) #删除全部内容
root.mainloop()

delete()用法稍稍复杂,我们看看下面这个表:

示例意思
entry.delete(0)删除第1个字符
entry.delete(1)删除第2个字符
entry.delete(0,2)删除第1-2个字符
entry.delete(0,tkinter.END)删除所有字符
entry.delete(0,tkinter.INSERT)从第1个开始一直删到光标所在位置的前面一个字符

移动光标

将光标移到指定的位置,不多说直接看下面的栗子:

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry(root)
entry.pack()
entry.icursor(0) #将光标移动到第一个字符之前
root.mainloop()

选中内容

我们可以让输入框选中某一部分内容,分别为entry.select_from()entry.select_to()方法,如:

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry(root)
entry.insert(tkinter.END,'Hello World!!!!')
entry.select_from(0) #从第1个字符开始
entry.select_to(7) #一直选择到第8个字符
entry.pack()

但也可以取消选中:

import tkinter
root = tkinter.Tk()
entry = tkinter.Entry(root)
entry.insert(tkinter.END,'Hello World!!!!')
entry.select_clear() #取消选中
entry.pack()

总结

上面就是输入框的主要内容啦。一起来复习一下:

属性意义
fg或foreground字体颜色
bg或background背景颜色
selectforeground被选中时候的字体颜色
selectbackground被选中时候的背景颜色
font字体,可以传入一个元组,也可以传入一个字符串
width长度
cursor光标放置在输入框上时的样式
state输入框状态,如禁用(Disabled),正常(Normal)
relief边框样式
bd或borderwidth边框粗细
show如何展示输入的内容
insertontime光标显示的时间
insertofftime光标被隐藏的时间
insertwidth光标粗细
import tkinter
root = tkinter.Tk()

entry = tkinter.Entry(root) #创建一个输入框

entry = tkinter.Entry(root,fg="red",bg="blue",selectbackground="black",selectforeground="white") #正常时蓝底红字,被选中的内容黑底白字
entry = tkinter.Entry(root,font=("宋体",25,"italic")) #字体为宋体,字号25,斜体
entry = tkinter.Entry(root,font="宋体") #字体为宋体,默认字体大小,默认样式

entry1 = tkinter.Entry(root,width=50) #长度约为50个英文字母
entry2 = tkinter.Entry(root,width=20) #长度约为20个英文字母

entry = tkinter.Entry(root,cursor="crosshair") #光标放在输入框上后样式为十字准心

entry1 = tkinter.Entry(root,state=tkinter.DISABLED) #禁用,无法点击也无法往里面输入内容,也无法从中复制内容
entry2 = tkinter.Entry(root,state=tkinter.NORMAL) #可以进行操作
entry3 = tkinter.Entry(root,state="readonly") #只能复制内容,而不可以输入内容。tkinter模块中,没有tkinter.READONLY 这个变量,所有就用字符串代替吧

entry = tkinter.Entry(root,relief="groove") #不同边框样式的输入框
entry = tkinter.Entry(root,bd=20) #厚厚的一层边框

entry = tkinter.Entry(root,show="*") #将输入的内容显示为"*"
entry = tkinter.Entry(root,show="") #显示原来的内容

entry1 = tkinter.Entry(root,justify=tkinter.RIGHT) #靠右
entry2 = tkinter.Entry(root,justify=tkinter.LEFT) #靠左
entry3 = tkinter.Entry(root,justify=tkinter.CENTER) #居中

entry = tkinter.Entry(root,insertofftime=100,insertontime=1000) #输入的时候,每次光标闪烁,都显示1000毫秒(即1秒),隐藏100毫秒

entry1 = tkinter.Entry(root,insertwidth=1) #细细的光标,粗细为1
entry2 = tkinter.Entry(root,insertwidth=10) #粗细为10

entry.configure(font=("Consolas",50)) #将字体更换为Consolas,字号50,默认样式

entry.insert(tkinter.END,"Hello World!!!") #在输入框中文字的末尾添加字符串"Hello World!!!"
entry.delete(0,tkinter.END) #删除全部内容
entry.get() #获取输入框中的内容

entry.icursor(0) #将光标移动到第一个字符之前

entry.pack() #把输入框放到窗口上去


entry.select_from(0) #从第1个字符开始选择
entry.select_to(7) #一直选择到第8个字符

entry.select_clear() #取消选中

root.mainloop()

哈哈,谢谢您的阅读!点个赞,关注一下呗!我们下期再见~

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年9月28日
下一篇 2023年9月28日

相关推荐