文中进行了大量的详细说明
能力有限,简单演示
# Text多行文本框
# Text的主要作用是显示多行文本,还可以显示网页链接、图片、HTML、CSS样式表,添加组件等。
# IDLE就是Text组件构成的
# 使用面向对象的方法,测试Text多行行文本组件
from tkinter import *
import webbrowser
class Application(Frame):
def __init__(self, master=None): # 创建构造函数,用于写明变量构造组件对象
# master初始是设置为空值
super().__init__(master) # 调用父类,这里相当于给了Frame
self.master = master # 这里的master相当于给自己的这个类
self.pack() # 布局管理器,进行放置
self.createWidget() # 实现调用
def createWidget(self):
self.t1 = Text(root, width=30, height=20, bg='gray')
# 一个汉字相对于两个字母,一个字母一个字节
self.t1.pack()
self.t1.insert(1.0, '123456789\nqwertyui') # 1.0表示第一行第0列
self.t1.insert(2.3, '苔花如米小,也学牡丹开。苔花如米小,也学牡丹开。\n') # 2.3在第二行第三列插入
self.btn01 =Button(self, text='重复写入文本', command=self.insertText)
self.btn01.pack(side='left')
self.btn02 = Button(self, text='返回文本', command=self.returnText)
self.btn02.pack(side='left')
self.btn03 = Button(self, text='添加图片', command=self.addImage)
self.btn03.pack(side='left')
self.btn04 = Button(self, text='通过tag精确控制文本', command=self.testTag)
self.btn04.pack(side='left')
self.btn05 = Button(self, text='添加组件', command=self.addWidget)
self.btn05.pack(side='left')
def insertText(self):
# INSERT 索引表示在光标出插入
self.t1.insert(INSERT, "jiangli")
# END索引号表示在最后插入
self.t1.insert(END, '[jl]')
def returnText(self):
# Indexes(索引)是用来指向Text组件中文本的位置,Text的组件索引也是对应实际字符之间的位置
# 核心:行号以1开始,列号以0开始
print(self.t1.get(1.2, 1.6))
self.t1.insert(1.7, '帅')
print('所有文本内容:\n'+self.t1.get(1.0, END))
def addImage(self):
# global photo
self.photo = PhotoImage(file="imgs/R-C.gif")
self.t1.image_create(END, image=self.photo)
def addWidget(self):
b1 = Button(self.t1, text='xiaoma')
# 在text创建组件命令
self.t1.window_create(INSERT, window=b1)
def testTag(self):
self.t1.delete(1.0, END)
self.t1.insert(INSERT, '123123123, 123123123\n123123123\n123123123\nbd') # 光标处插入
self.t1.tag_add('good', 1.0, 1.9) # 增加标记 ,1.0, 1.9开始到结束
self.t1.tag_config('good', background='red', foreground='yellow')
self.t1.tag_add('bd', 4.0, 4.2)
self.t1.tag_config('bd', underline=True) # underline=True加下滑线
self.t1.tag_bind('bd', "<Button-1>", self.webshow) # 绑定该方法webshow
def webshow(self, event):
webbrowser.open('http://www.baidu.com')
if __name__ == '__main__':
root = Tk()
root.geometry('400x400+300+300')
root.title("面向对象方法的GUI")
APP = Application(master=root) # 创建实例化对象,master是参数
root.mainloop()
运行结果截图