話不多說,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()
運行效果圖如下: