代码5

"""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()
posted @ 2024-04-29 14:52  thanksDay  阅读(14)  评论(0)    收藏  举报