老师,问题如下图:
![1586599657573161.png ZB0SM8]]BI(Z@SUJTN605ZW.png](/ueditor/php/upload/image/20200411/1586599657573161.png)
from tkinter import *
from tkinter import messagebox
import webbrowser
class Application(Frame):
'''一个经典的GUI程序的类的写法'''
def __init__(self, master=None):
super(Application, self).__init__(master) #super()代表的是父类的定义,而不是父类的对象/虽然继承了Frame,但不会调用Frame的构造器
self.master = master
self.pack()
self.createwidget() #需要创建多个窗口对象时,需要调用此
def createwidget(self):
'''创建组件'''
self.w1 = Text(root, width=40, height=12, bg='gray') #40列字符 12行字符的高度
#宽度 20个字母(10个汉字),高度一个行高
self.w1.pack()
self.w1.insert(1.0, '123456789\nabcdefg')
self.w1.insert(2.3, '锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦\n')
Button(self, text='重复插入文本', command=self.insertTest).pack(side='left') #若写’left‘,默认垂直排列
Button(self, text='返回文本', command=self.returnTest).pack(side='left')
Button(self, text='添加图片', command=self.addImage).pack(side='left')
Button(self, text='添加组件', command=self.addWidget).pack(side='left')
Button(self, text='通过tag精确控制文本',command=self.bindTag).pack(side='left')
def insertTest(self):
# INSERT 索引表示在光标处插入
self.w1.insert(INSERT, 'gaoqi')
# END索引号表示在最后插入
self.w1.insert(END, '[sxt]')
self.w1.insert(1.8, 'gaoqi')
def retuRntest(self):
# Indexes(索引)是用来指向Text组件中的文本的位置,Text组件索引也是对应实际字符之间的位置
# 核心:行号以1开始,列好以0开始
print(self.w1.get(1.2, 1.6))
print('所有文本内容:\n'+self.w1.get(1.0, END)) # 将文本内容返回到Run框中
def addImage(self):
global photo
self.photo = PhotoImage(file='imgs/星球.gif')
self.w1.image_create(END, image=self.photo)
def addWidget(self): #增加组件
b1 = Button(self.w1, text='爱尚学堂')
#在text 创建组件的命令
self.w1.window_create(INSERT, window=b1)
def bindTag(self):
self.w1.delete(1.0,END)
self.w1.insert(INSERT, 'good good study,day day up!\n北京尚学堂\n'
'百战程序员\n百度,搜一下就知道')
self.w1.tag_add('good', 1.0, 1.9) #给’1.0‘到’1.9‘增加一个标记,’good‘或其他也可以
self.w1.tag_config('good', background='yellow', foreground='red')
#config 给标记处增加配置
self.w1.tag_add('baidu', 4.0, 4.2)
self.w1.tag_config('baidu', underground=True) #加了下划线
self.w1.tag_bind('baidu', '<Button-1>', self.webshow)
#bind 绑定事件
def webshow(self, event):
webbrowser.open('http://www.baidu.com')
if __name__=='__main__': # 规范写法,作为独立的个体去调用
root = Tk()
root.geometry('400x300+200+300')
app = Application(master=root)
root.mainloop()