Python Tkinter组件之Text

2,742 阅读5分钟

玩转Python

这是我参与8月更文挑战的第25天,活动详情查看: 8月更文挑战

复习回顾

我们在掘金社区玩了一段时间后,遇到好多大佬丰富的介绍,那我们也去改改个人介绍吧,点开个人介绍页面如下

  • 我们的头像和左边文字显示是Label标签
  • 从用户名栏一直到个人主页栏是Entry单行文本框
  • 个人介绍框支持多行文本输入是Text多行文本框
  • 最后修改好以上的信息之后点击保存修改按键是Button按钮

观察一下,个人介绍栏与其他栏除了形状大小的区别之外,还有什么区别?

我们带着疑问,开启本期将学习Python Tkinter组件支持多文本输入框的Text组件相关属性及方法学习,Let's go

1. Text 组件概述

Text 多行文本框,用来接收多行文本

  • 当成“富文本”编辑页面,需要输入大量字符串等场景

  • 可以显示网页链接、图片、HTML页面,甚至CSS样式,添加组件等

Text 语法格式如下:

   Txt = Text(master,Options)

2. Text 与 Entry 对比

Entry 和 Text 是Python Tkinter的标准组件,都是可接收用户输入的输入框组件。

  • 相同点

    1. Entry 与 Text 都提供get()方法来获取文本框中的内容
    2. Entry 与 Text 都提供insert()方法来改变文本框中的内容
    3. Entry 与 Text 都支持索引
  • 不同点

    1. Entry 支持单行输入,Text支持多行输入
    2. Entry 不支持添加不同的格式,Text可以为不同部分添加不同的格式
    3. Entry 的索引写法简单如(3,8)表示第4个字符到第8个字符,Text 的索引需要同时指定行号和列号(1.3,2.6)表示第1行第4个字符,到第2行第7个字符
    4. Entry 支持双向绑定,可以将Entry与变量绑定在一起吗,也可以通过变量来改变、获取Entry组件中的内容;Text则不支持,只能与变量进行绑定

3. Text 组件常见属性

属性含义
height设置文本框的高度,高度值每加1则加一行
width设置文本框的宽度,宽度值每加1则加一个字节
insert文本框插入数据,可以指定插入数据的位置
delete删除文本框中的数据,可以通过数据位置,指定删除的数据
get获取文本框中的数据,可以通过数据位置,指定获取的数据
relief文本框样式,设置控件显示效果,可选的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。
bd设置文本框的边框大小,值越大边框越宽
bg设置文本框默认背景色
fg设置文本框默认前景色,即字体颜色
font文本字体,文字字号,文字字形。字形有overstrike/italic/bold/underline
state文本框状态选项,状态有DISABLED/NORMAL,DISABLED状态文本框无法输入,NORMAL状态可以正常输入
highlightcolor设置文本框点击后的边框颜色
highlightthickness设置文本框点击后的边框大小

4. Text 组件提供常用方法

方法作用
bbox(index)显示指定的字符屏幕区域
compare(index1,op,index2)比较两个位置的字符是否满足指定关系
count(index1,index2)计算指定位置间距离
delete(index)删除指定字符串
dlineinfo(index)返回指定位置的行占用区域
dump(index)转存指定位置的内容
edit(*args)在指定位置编辑内容
edit_modified()编辑修改内容
edit_redo()撤销编辑的内容
get(index)获取指定位置的内容
image_cget()获取嵌入的图像的内容
image_names()获取图像的名字
insert(index,chars)插入新内容到指定的位置
mark_names标记信息
peer_names创建查询组件的名字
search(pattern,index)在指定范围内查询内容
window_create(index)

5. 小试牛刀

Text相关方法练习效果如下:

  1. 创建Text 组件对象,可以通过Option设置其属性。

    例如创建一个背景颜色为粉色的Text组件

    self.txt = Text(root,width = 40,height = 12,bg ="pink")
    
  2. Text组件可以支持添加多行本,可以使用insert()方法添加多行字符

     def insertText(self):
    
        self.txt.insert(INSERT,'小可爱')
    
        self.txt.insert(END,'celebrating')
    
  3. Text组件支持添加图片,可以使用image_create()

    def addImage(self):
    
        self.photo = PhotoImage(file = "heart.gif")
        self.txt.image_create(END,image = self.photo)
    
  4. Text组件添加其他组件,使用window_create()方法

     def addWidget(self):
    
        b1 = Button(self.txt,text = "盆友圈")
        self.txt.window_create(INSERT,window = b1)
    
  5. Text组件清空字符串,可以使用delete()方法

    def resetText(self):
    
        self.txt.delete(1.0,END)
    

    📣 INSET 表示光标位置,END 将光标移到文本末尾

  6. 使用GUI面向对象编程写法,使用Application(Frame)来创建实例对象,创建组件的方法封装给createWidgetText()方法,通过构造函数创建好组件

  7. 最后完整代码如下:

from tkinter import *
class Application(Frame):


    def __init__(self,master=None):
        # super()代表的是父类的定义,而不是父类对象
        super().__init__(master)
        self.master = master
        self.pack()

        self.CreatWidgetText()


    def CreatWidgetText(self):

        self.txt = Text(root,width = 40,height = 12,bg ="pink")

        self.txt.pack()

        self.txt.insert(1.0,"1234567890 \n dsddd")

        self.txt.insert(2.0,"welcome to juejin  everyone ")


        Button(self,text = "COPY",command = self.insertText ).pack(side = "left")
        Button(self, text="BACK", command=self.returnText).pack(side="left")
        Button(self, text="AddImage", command=self.addImage).pack(side="left")
        Button(self, text="AddWidget", command=self.addWidget).pack(side="left")
        Button(self, text="RESET", command=self.resetText).pack(side="left")

    def insertText(self):

        self.txt.insert(INSERT,'小可爱')

        self.txt.insert(END,'celebrating')

    def returnText(self):

        print(self.txt.get(1.2,1.6))
        self.txt.insert(3.0,"小可爱")
        print("All text:\n"+self.txt.get(1.0,END))

    def addWidget(self):

        b1 = Button(self.txt,text = "盆友圈")
        self.txt.window_create(INSERT,window = b1)

    def addImage(self):

        self.photo = PhotoImage(file = "heart.gif")
        self.txt.image_create(END,image = self.photo)

    def resetText(self):

        self.txt.delete(1.0,END)

root = Tk()
root.geometry("400x300+200+300")
root.title("MyfirstAPP")
app = Application(master=root)

root.mainloop()

总结

本期,我们又学习Tkinter组件之文本输入框

  • Entry单行文本框常用于登陆界面用户命名、密码等表单填写场景
  • Text 多行文本框一般被用来作为富文本来使用,支持多种文本格式

在工作场景需要接收用户输入的字符串,我们可以按照输入内容多少来选择使用Entry和Text组件,同时它们也提供对文本进行删除、修改、插入等方法。

以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心🌹