话不多说,Tkinter中各组件属性很多,对应函数也不少,学习时不用面面俱到,学会使用方法,也不用记忆,需要时拿来用就可以。下面是学习text组件时边学边敲出来的代码,留作以后需要查看。
# GUI经典写法:面向对象的写法
# Frame框架是一个容器,放其他组件的容器
# 下面是一个测试经典的GUI程序的写法,使用面向对象的方式
# Text多行文本组件
# 属性有:很多
# 方法insert在指定位置插入、delete指定区域删除
# 方法tag_add指定一段区域的tag,然后通过tag_config来给这个tag配置属性,通过tag_bind可以加事件。
# 另外pack布局时,可以设定side = 'left' 之类的可以将其简单排版。
from tkinter import *
from tkinter import messagebox
import os
import webbrowser
class Application(Frame):
"""一个经典的GUI程序"""
def __init__(self,master=None):#构造器,构造一个组件对象
super().__init__(master) #super代表的是父类的定义,而不是父类对象。
self.master = master
self.pack()
self.createWidget()
def createWidget(self):
self.w1 = Text(self,width = 40, height = 12, bg = 'white')
self.w1.pack()
self.w1.insert(1.0,"012346789\nabcdefghi")
self.w1.insert(2.4,"Nice to meet you!")
Button(self,text='插入文本',command = self.insertText).pack(side = 'left')
Button(self,text='返回文本',command = self.returnText).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.testTag).pack(side = 'left')
def insertText(self):
#INSERT索引表示在光标处插入
#END表示在在最后插入
self.w1.insert(INSERT,"baidu")
self.w1.insert(END,'[end]')
def returnText(self):
print(self.w1.get(1.2,1.6))
self.w1.insert(1.8,"608")
print("All the Text:\n"+self.w1.get(1.0,END))
def addImage(self):
self.photo = PhotoImage(file = 'imgs/icon1.png')
self.w1.image_create(END,image = self.photo)
def addWidget(self):
b1 = Button(self.w1,text = 'test')
self.w1.window_create(INSERT,window = b1)
def testTag(self):
self.w1.delete(1.0,END)
self.w1.insert(INSERT,"Hello,I'm Sophia.\n I'm from China。\nI'm working in baidu。")
self.w1.tag_add("gd",3.15,3.21)
self.w1.tag_config('gd',underline = True,foreground = 'red')
self.w1.tag_bind("gd","<Button-1>",self.webshow)
def webshow(self,event):
webbrowser.open("http://www.baidu.com")
if __name__ == '__main__':
root = Tk()
root.geometry("600x200+200+300")
root.title("一个GUI程序")
app = Application(master=root)
root.mainloop()
运行效果图如下: