Text多行文本框详解

Text多行文本框主要用于显示多行文本, 还可以显示网页链接, 图片, HTML页面, 甚至CSS样式表, 添加组件等. 因此, 也被当做简单的文本处理器, 文本编辑器或者网页浏览器来使用. 比如:IDLE就是Text组件构成的.

 

 1 # coding:utf-8
 2 from tkinter import *
 3 import webbrowser
 4 
 5 
 6 class Application(Frame):
 7     """一个经典的GUI程序类写法"""
 8     def __init__(self, master=None):
 9         super().__init__(master)          # super代表的是父类的定义,而不是父类的对象
10         self.master = master
11         self.pack()
12         self.createWidget()
13 
14     def createWidget(self):
15         """创建登录界面组件"""
16         self.w1 = Text(root, width=40, height=12, bg='gray')
17         self.w1.pack()
18         self.w1.insert(1.0, '123456789\nabcdefg')
19         self.w1.insert(2.3, 'ooooooooooooooooo')
20 
21 
22         Button(self, text='重复插入文本', command=self.insertText).pack(side='left')
23         Button(self, text='返回文本', command=self.returnText).pack(side='left')
24         Button(self, text='插入图片', command=self.addImage).pack(side='left')
25         Button(self, text='添加组件', command=self.addWidget).pack(side='left')
26         Button(self, text='通过tag精确控制文本', command=self.testTag).pack(side='left')
27 
28 
29     def insertText(self):
30         # INSERT索引表示在光标处插入
31         self.w1.insert(INSERT, 'Xujie')
32         # END索引表示在最后插入
33         self.w1.insert(END, 'Liran')
34         self.w1.insert(1.2, 'Xujie')
35 
36 
37     def returnText(self):
38         # Indexes索引用来指向Text组件中文本配置, Text组件索引也是对应实际字符之间的位置
39         #核心:行号从1开始, 列号从零开始
40         print(self.w1.get(1.2, 1.6))
41         print('所有文本内容\n'+self.w1.get(1.0, END))
42 
43 
44     def addImage(self):
45         self.photo = PhotoImage(file='1/little_pic.gif')
46         self.w1.image_create(END, image=self.photo)
47 
48 
49     def addWidget(self):
50         b1 = Button(self.w1, text='爱liran')
51         # 在text组件中创建命令
52         self.w1.window_create(INSERT, window=b1)
53 
54 
55     def testTag(self):
56         self.w1.delete(1.0, END)
57         self.w1.insert(INSERT, 'good good study, day day up!\n百度搜索')
58         self.w1.tag_add('good', 1.0, 1.9)
59         self.w1.tag_config('good', background='red',foreground='yellow')
60         self.w1.tag_add('baidu', 2.0, 2.2)
61         self.w1.tag_config('baidu', underline=True)
62         self.w1.tag_bind('baidu', '<Button-1>', self.webshow)
63 
64 
65     def webshow(self, event):
66         webbrowser.open('http://www.baidu.com')
67 
68 
69 
70 if __name__ == "__main__":
71     root = Tk()
72     root.geometry("400x450+200+300")
73     root.title('测试')
74     app = Application(master=root)
75     root.mainloop()