"""Text多行输入测试"""
# 导入tkinter库,这是一个用于创建图形用户界面(GUI)的Python库
from tkinter import *
# 导入tkinter库中的messagebox模块,用于显示对话框(虽然在此代码中并未使用到)
from tkinter import messagebox
# 导入webbrowser库,用于在默认浏览器中打开网址
import webbrowser
# 定义一个Application类,它继承自tkinter库中的Frame类
class Application(Frame):
"""一个用于创建经典GUI程序的类"""
# 类的初始化方法
def __init__(self, master=None):
"""初始化Application类的实例"""
# 调用父类的初始化方法,使得我们可以在子类中调用父类的方法
# 这里是多态性的一个应用,super()代表父类
super().__init__(master)
self.master = master # 保存对根窗口的引用
self.pack() # 将Application对象(即Frame)打包到其父组件(这里是根窗口),使其显示
self.create_widget() # 调用方法创建GUI组件
# 定义一个方法来创建GUI的各种组件
def create_widget(self):
"""创建并添加一个文本输入框及多个按钮到GUI界面"""
# 创建一个Text组件,用于多行文本输入和显示
self.w1 = Text(self.master, width=40, height=12, bg="white")
self.w1.pack() # 打包Text组件到根窗口
# 在Text组件中插入初始文本
self.w1.insert(1.0, "013456789 nabcdefg")
self.w1.insert(2.3, "锄禾日当午,汗滴禾下土。谁知盘中餐,粒粒皆辛苦\n")
# 创建并添加多个按钮,每个按钮都绑定了一个特定的命令
Button(self, text="重复插入文本", command=self.insert_text).pack(side="left")
Button(self, text="返回文本", command=self.return_text).pack(side="left")
Button(self, text="添加图片", command=self.add_image).pack(side="left")
Button(self, text="添加组件", command=self.add_widget).pack(side="left")
Button(self, text="通过tag精确控制文本", command=self.test_tag).pack(side="left")
# 定义按钮对应的各个方法
def insert_text(self):
"""在Text组件中插入文本"""
self.w1.insert(INSERT, 'Gaoqi :)') # 在光标处插入文本
self.w1.insert(END, '[sxt]') # 在文本最后插入内容
def return_text(self):
"""返回并打印Text组件中的特定文本和全部文本"""
print(self.w1.get(1.2, 1.6)) # 打印1.2到1.6索引之间的文本
self.w1.insert(1.8, "gaoqi") # 在1.8索引处插入文本
print("所有文本内容:\n" + self.w1.get(1.0, END)) # 打印全部文本内容
def add_image(self):
"""在Text组件中添加图片"""
self.photo = PhotoImage(file="imgs/logo.gif") # 从文件加载图片
self.w1.image_create(END, image=self.photo) # 在Text组件的最后添加图片
def add_widget(self):
"""在Text组件中添加一个按钮组件"""
b1 = Button(self.w1, text='爱尚学堂') # 创建一个按钮
self.w1.window_create(INSERT, window=b1) # 在Text组件的当前光标位置插入该按钮
def test_tag(self):
"""通过tag精确控制Text组件中的文本"""
self.w1.delete(1.0, END) # 清空Text组件中的内容
self.w1.insert(INSERT, "good good study, day day up!\n北京尚学堂\n百战程序员瓜n百度") # 插入新文本
# 为特定文本添加tag,并配置tag的样式
self.w1.tag_add("good", 1.0, 1.9)
self.w1.tag_config("good", background="yellow", foreground="red")
self.w1.tag_add("baidu", 4.0, 4.2)
self.w1.tag_config("baidu", underline=True)
# 为带有"baidu" tag的文本绑定鼠标左键点击事件
self.w1.tag_bind("baidu", "<Button-1>", self.webshow)
def webshow(self, event):
"""在默认浏览器中打开百度网址"""
webbrowser.open("http://www.baidu.com")
# 创建一个Tk窗口实例作为根窗口
root = Tk()
root.title("Text多行输入测试") # 设置窗口的标题
# 创建Application类的实例,并将其与根窗口关联起来
app = Application(master=root)
# 进入Tkinter事件循环,等待用户的交互操作
root.mainloop()
标签:Text,代码,tag,w1,组件,文本,self
From: https://www.cnblogs.com/aihonghua/p/18165702