Python tkinter 学习笔记(6) -- Entry 和 Text
目录
Python tkinter 学习笔记(6) -- Entry 和 Text
简单的理解就是:Entry是单行文本输入框,Text是多行文本输入,当然Text还有更强大的功能,本章节就具体讲解这两个控件
Entry
相关语法:w = Entry( master, option, ... )
其中Option如下表所示:
序号 | 可选项 & 描述 |
---|---|
1 | bg 输入框背景颜色 |
2 | bd 边框的大小,默认为 2 个像素 |
3 | cursor 光标的形状设定,如arrow, circle, cross, plus 等 |
4 | font 文本字体 |
5 | exportselection 默认情况下,你如果在输入框中选中文本,默认会复制到粘贴板,如果要忽略这个功能刻工艺设置 exportselection=0。 |
6 | fg 文字颜色。值为颜色或为颜色代码,如:'red','#ff0000' |
7 | highlightcolor 文本框高亮边框颜色,当文本框获取焦点时显示 |
8 | justify 显示多行文本的时候,设置不同行之间的对齐方式,可选项包括LEFT, RIGHT, CENTER |
9 | relief 边框样式,设置控件3D效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默认为 FLAT。 |
10 | selectbackground 选中文字的背景颜色 |
11 | selectborderwidth 选中文字的背景边框宽度 |
12 | selectforeground 选中文字的颜色 |
13 | show 指定文本框内容显示为字符,值随意,满足字符即可。如密码可以将值设为 show="*" |
14 | state 默认为 state=NORMAL, 文框状态,分为只读和可写,值为:normal/disabled |
15 | textvariable 文本框的值,是一个StringVar()对象 |
16 | width 文本框宽度 |
17 | xscrollcommand 设置水平方向滚动条,一般在用户输入的文本框内容宽度大于文本框显示的宽度时使用。 |
在之前的文章里面已经简单介绍过Entry控件,这里需要讲解Show选项,在我们设置登录或者其他界面的时候会使用到这两个属性 ,例如在登录界面,密码框,显示密码为:* 字符,具体可以参考之前的博文
这里以另外一个好玩的实例作为讲解,比如利用输入框的validate、validatecommand 和 invalidcommand 选项来实现调用子程序的方式,常用在提前验证输入内容完整性、准确型上面,例如验证码之类的
代码:
# coding=utf-8
import tkinter as tk
# 主窗口
win = tk.Tk()
win.geometry("300x200+400+200")
win.title("Tkinter Entry 用法")
# 创建验证子程序
def test():
if e1.get() == "test":
print("正确!")
return True
else:
print("错误!")
e1.delete(0, "end")
return False
v = tk.StringVar()
# 第一行
l1 = tk.Label(text="验证码:").grid(row=0,column=0)
e1 = tk.Entry(win, textvariable=v, validate="focusout", validatecommand=test)
e1.grid(row=0,column=1)
# 第二行
l2 = tk.Label(text="验证结果").grid(row=1,column=0)
e2 = tk.Entry(win).grid(row=1,column=1)
# 开始窗口的事件循环
win.mainloop()
效果:
当我们第一行输入test的时候,命令行会出现正确,反之显示“错误”。
Text
Text是一个比较强大的文本框工具,除了文本输入之外,还可以临时作为网页浏览器,还能能在Text插入一些常用的控件,等等
具体Option参考下表:
option | 解释 |
---|---|
background | ①指定该Tag所描述的内容的背景颜色 ②注意:bg并不是该选项的缩写,在这里bg被解释成bgstipple选项的缩写 |
bgstipple | ①指定一个位图作为背景,并使用background选项指定的颜色填充 ②只有设定了background选项,该选项才会生效 ③默认的标准位图有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question'和'warning' |
borderwidth | ①指定文本框的宽度 ②默认值是0 ③只有设定了relief选项该选项才会生效 ④注意:该选项不能使用bd缩写 |
fgstipple | ①指定一个位图作为前景色 ②默认的标准位图有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question'和'warning' |
font | ①指定该Tag所描述的内容使用的字体 |
foreground | ①指定该Tag所描述的内容使用的前景色 ②注意:fg并不是该选项的缩写,在这里fg被解释为fgstipple的缩写 |
justify | ①控制文本的对齐方式 ②默认是LEFT(左对齐),还可以选择RIGHT(右对齐)和CENTER(居中) ③注意:需要将Tag指向该行的第一个字符,该选项才能生效 |
Imargin1 | ①设置Tag指向的文本块第一行的缩进 ②默认值是0 ③注意:需要将Tag指向该行的第一个字符或整个文本块,该选项才能生效 |
Imargin2 | ①设置Tag指向的文本块除了第一行其他行的缩进 ②默认值是0 ③注意:需要将Tag指向整个文本块,该选项才能生效 |
offset | ①设置Tag指向的文本相对于基线的偏移距离 ②可以控制文本相对于基线是升高(正数值)或者降低(负数值) ③默认值是0 |
overstrike | ①在Tag指定的文本范围画一条删除线 ②默认值是False |
relief | ①指定Tag对应范围的文本的边框样式 ②可以使用的值有:SUNKEN,RAISED,GROOVE,RIDGE或FLAT ③默认值是FLAT(没有边框) |
margin | ①设置Tag指向的文本块右侧的缩进 ②默认值是0 |
spacing1 | ①设置Tag所描述的文本块中每一行与上方的文本间隔 ②注意:自动换行不算 ③默认值是0 |
spacing2 | ①设置Tag所描述的文本块中自动换行的各行间的空白间隔 ②注意:换行符("\n")不算 ③默认值是0 |
spacing3 | ①设置Tag所描述的文本块中每一行与下方的文本间隔 ②注意:自动换行不算 ③默认值是0 |
tabs | ①定制Tag所描述的文本块中Tab按键的功能 ②默认Tab被定义为8个字符的宽度 ③你还可以定制多个制表位:tabs=('3c', '5c', '12c')表示前三个Tab的宽度分别为3cm,5cm,12cm,接着的Tab按照最后两个的差值计算,即:19cm,26cm,33cm ④你应该注意到,它上边'c'的含义是“厘米”而不是“字符”,还可以选择的单位有"i"(英寸),"m"(毫米),"p"(DPI,大约是'1i'等于'72p') ⑤如果是一个整型值,则单位是像素 |
underline | ①该选项设置为True的话,则Tag所描述的范围内的文本将被画上下划线 ②默认值是False |
wrap | ①设置当一行文本的长度超过width选项设置的宽度时,是否自动换行。 ②该选项的值可以是:NONE(不自动换行),CHAR(按字符自动换行)和WORD(按单词自动换行) |
在之前的文章里面已经简单介绍过Text控件,在使用Text的时候我们第一影响就是记事本功能,例如:写了一个记事本(后面会写的),当我们的内容发生改变的时候提醒用户内容已经变化,是否保存
创建一个简单的文本框
代码:
import tkinter as tk
# coding=utf-8
import tkinter as tk
# 主窗口
win = tk.Tk()
win.geometry("300x200+400+200")
win.title("Tkinter Text 用法")
# 创建一个Text
T1 = tk.Text().pack()
# 开始窗口的事件循环
win.mainloop()
效果:
设置Text的大小、文本颜色、背景颜色
import tkinter as tk
import tkinter.font as tf
# coding=utf-8
import tkinter as tk
# 主窗口
win = tk.Tk()
win.geometry("300x200+400+200")
win.title("Tkinter Entry 用法")
# 创建一个Text控件
T1 = tk.Text(font='方正小标宋')
T1.pack()
char = ['Python','Tkinter 使用方法','Hello World','用户界面设计'] #插入到text中
for i in range(4):
a = str(i+1)+'.0'
T1.insert(a,char[i]+'\n')
#选择中第一行前四个字
T1.tag_add("tag1", "1.0", "1.4")
#选择中第二行所有文字
T1.tag_add("tag2", "2.0", "2.12")
# 设置第一行选中文字颜色
T1.tag_config("tag1", background="yellow", foreground="black")
# 设置第二行选中文字颜色
T1.tag_config("tag2", background="black", foreground="white")
# 开始窗口的事件循环
win.mainloop()
效果:
制作一个简易的文本编辑器,实现打开、编辑、保存
用到的控件Button,Scrollbar、Text
代码:
# coding=utf-8
import tkinter as tk
from tkinter import Message, filedialog,dialog,messagebox
# 主窗口
win = tk.Tk()
# 取屏幕宽度
sw = win.winfo_screenwidth()
sh = win.winfo_screenheight()
w = 1024
h = 768
# 居中
x = (sw-w)/2
y = (sh-h)/2
# 取屏幕高度
win.geometry("%dx%d+%d+%d" % (w,h,x,y))
win.title("Tkinter Text 用法")
win.resizable(0,0)
# 创建一个Text控件
T1 = tk.Text(width=145,height=56)
T1.place(x=2,y=35)
# 添加一个纵向的滚动条
xscroll = tk.Scrollbar()
xscroll.pack(side=tk.RIGHT,fill=tk.Y)
xscroll.config(command=T1.yview)
T1.config(yscrollcommand=xscroll.set)
###### 打开文件(Open) ######
def openfile():
fop = filedialog.askopenfilename()
rfop = open(fop,'r',encoding='utf-8')
raw = rfop.read()
win.title("Tkinter Text 用法[ "+ fop +" ]")
T1.insert("insert",raw)
Btn_open = tk.Button(win,text="打开(O)",command=openfile).place(x=2,y=2)
###### 保存(Save) ######
def savefile():
global fsave
global fcontent
fsave = filedialog.asksaveasfilename(title=u'保存文件')
fcontent = T1.get('1.0',tk.END)
if fsave is not None:
with open(file=fsave,mode='a+',encoding='utf-8') as file:
file.write(fcontent)
dialog.Dialog(None,{'title':'File Modified','text':'保存完成','bitmap':'warning','default':0,'strings':('OK','Cancle')})
messagebox.showinfo(title="保存提示",message='保存成功!')
Btn_save = tk.Button(win,text="保存(S)",command=savefile).place(x=55,y=2)
# 开始窗口的事件循环
win.mainloop()
效果: