天天看点

Python tkinter 学习笔记(6) -- Entry 和 Text(简易的文本编辑器)Python tkinter 学习笔记(6) --  Entry 和 Text

Python tkinter 学习笔记(6) --  Entry 和 Text

目录

Python tkinter 学习笔记(6) --  Entry 和 Text

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

效果:

Python tkinter 学习笔记(6) -- Entry 和 Text(简易的文本编辑器)Python tkinter 学习笔记(6) --  Entry 和 Text

当我们第一行输入test的时候,命令行会出现正确,反之显示“错误”。

Python tkinter 学习笔记(6) -- Entry 和 Text(简易的文本编辑器)Python tkinter 学习笔记(6) --  Entry 和 Text

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

效果:

Python tkinter 学习笔记(6) -- Entry 和 Text(简易的文本编辑器)Python tkinter 学习笔记(6) --  Entry 和 Text
设置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()
           

效果:

Python tkinter 学习笔记(6) -- Entry 和 Text(简易的文本编辑器)Python tkinter 学习笔记(6) --  Entry 和 Text

制作一个简易的文本编辑器,实现打开、编辑、保存

用到的控件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()
           

 效果:

Python tkinter 学习笔记(6) -- Entry 和 Text(简易的文本编辑器)Python tkinter 学习笔记(6) --  Entry 和 Text
Python tkinter 学习笔记(6) -- Entry 和 Text(简易的文本编辑器)Python tkinter 学习笔记(6) --  Entry 和 Text
Python tkinter 学习笔记(6) -- Entry 和 Text(简易的文本编辑器)Python tkinter 学习笔记(6) --  Entry 和 Text