當前位置:首頁 ? tkinter ? 正文

強大的tkinter的多行文本框組件Text

創建多行文本框,設置高和寬

Text組件是多行文本框,我們以前學的Entry單行文本框,但Text組件并不只是可以多行輸入而已,它功能非常強大,你可以把這個組件當成簡單的文字處理軟件,也可以當網頁瀏覽器使用,它可以插入文字,插入圖片,插入組件,這個組件,我們要這的知識點很多。

Text組件創建方法:Text(父組件, 參數)

我們可以用默認的參數來創建一個Text組件,

如:te1=Text(root)

 

我們也可以限定組件的寬和高來創建一個Text組件

如: te1=Text(root,width=12,height=5) # 寬12個字符,高5行字符

 

我們現在創建一個文本框看看:

from tkinter import *
 
root=Tk()
 
te1=Text(root,width=12,height=5)  # 12個字符寬,5行高
te1.pack()
 
root.mainloop()

運行結果:

    1.PNG

 

我們來創建一個默認寬和高的Text組件

from tkinter import *
 
root=Tk()
 
te1=Text(root)  # 默認寬高
te1.pack()
 
root.mainloop()

  運行結果是,默認的Text組件比前面設定的12個字符寬和5行高要大不小。但是調整窗體大小,上述2個代碼生成的Text組件都不能隨窗體調整尺寸,但我們只要把pack()加入參數 fill=X,expand=True 窗體就會隨窗體上下左右都可以擴展跟窗體一樣的尺寸了。

為Text組件綁定滾動條

我們來溫習一下以前的知識,為Text組件加入垂直滾動條。先創建垂直滾動條scr1,然后滾動條和Text的滾動設置各自綁定:

te1.config(yscrollcommand = scr1.set)
scr1.config(command = te1.yview)

全部代碼如下:

from tkinter import *
 
root=Tk()
 
scr1=Scrollbar(root)  # 垂直滾動條
scr1.pack(side='right',fill=Y)
 
te1=Text(root) # 默認寬高
te1.pack(side='left',fill=BOTH,expand=True)
 
te1.config(yscrollcommand = scr1.set) # 滾動設置互相綁定
scr1.config(command = te1.yview)  # 滾動設置互相綁定
 
root.mainloop()

運行結果:

2.PNG

測試一下,把窗體拖動一下改變尺寸,應該沒有發現有什么問題。但是,你如果把創建垂直滾動條的創建代碼移到Text組件創建代碼之后,就會發現問題:把窗體寬度變小一點,滾動條就消失了。

解決辦法:

1. 滾動條創建代碼移動到Text組件之前

2. Text組件的創建代碼,加入width參數,這個參數值要小于窗體默認大小,如width=12,height=5

3. 改用grid()布局定位方式

 

下面就是用grid()布局定位方式的代碼:    丶丌皛 python

from tkinter import *
 
root=Tk()
 
root.rowconfigure(0,weight=1) # 第1行 縮放權重為1
root.columnconfigure(0,weight=1) # 第1列 綻放權重為1
 
te1=Text(root) # 默認寬高
te1.grid(sticky=W+E+S+N) # te1向4邊擴展
 
scr1=Scrollbar(root)  # 垂直滾動條
scr1.grid(row=0,column=1,sticky=N+S) # scr1向上下擴展
 
te1.config(yscrollcommand = scr1.set) # 滾動設置互相綁定
scr1.config(command = te1.yview)  # 滾動設置互相綁定
 
root.mainloop()

以上為我的經驗之談,我在實際編碼時,發現滾動條可能會消失,于是經驗告訴大家,大家也應該多碼字,多編程,光看不練是學不好編程的。

 

Text組件插入字符方法 insert() 

insert()方法可以將字符插入到指定的位置,語法如下:

    insert(插入位置, 插入字符)

如:insert(END,'汽車')   # 在字符串末尾插入字符

    insert(INSERT,'汽車')  # 在光標處插入字符

    insert(2.3,'飛機')  # 在第2行,第3列處插入字符

        注:行從1開始起步,列從0開始起步

 

下面我們來演示一下從不同的位置插入字符。

from tkinter import *
 
root=Tk()
 
root.rowconfigure(0,weight=1) # 第1行 縮放權重為1
root.columnconfigure(0,weight=1) # 第1列 縮放權重為1
 
te1=Text(root) # 默認寬高
te1.grid(sticky=W+E+S+N) # te1向4邊擴展
 
scr1=Scrollbar(root)  # 垂直滾動條
scr1.grid(row=0,column=1,sticky=N+S) # scr1向上下擴展
 
te1.config(yscrollcommand = scr1.set) # 滾動設置互相綁定
scr1.config(command = te1.yview)  # 滾動設置互相綁定
 
for i in range(1000,1025): # 插入1000至1024
    te1.insert(END,str(i)+'\n')
 
te1.insert(END,'汽車') # 在字符串末尾插入汽車
te1.insert('2.0','飛機') # 在第2行0列插入飛機
te1.insert('4.1','摩托') # 在第4行1列插入摩托
te1.insert('6.2','火車') # 在第6行2列插入摩托
te1.insert('8.1+2 chars','輪船') # 在第8行3列插入輪船
te1.insert('10.end','單車') # 在第10行最后列插入摩托
 
te1.bind("<Double-Button-1>",lambda event:te1.insert(INSERT,'好'))
# 鼠標雙擊在光標處插入‘好’字
root.mainloop()

運行結果如下:

3.PNG

運行后,在不同的位置插入汽車,飛機……  用戶用鼠標雙擊某個位置,就會在光標閃爍處插入‘好’字。

 insert方法中的位置表達式

在這里,重點說一下插入位置的表達式,上面代碼有用到“位置表達式”,例如:

te1.insert('8.1+2 chars','輪船') # 在第8行3列插入輪船

上面‘8.1+2 chars’就是表達式。位置表達式有幾種情況:


'+N chars'  位置向右移動N個字符,可越過換行,但不能超過END位置

'-N chars'  位置向左移動N個字符,可越過換行,但不能超過1.0位置

'+N lines'  位置向下移動N行,如果目標行字符數少于目前行,位置將移動到目標行的末尾

'-N lines'  位置向上移動N行,如果目標行字符數少于目前行,位置將移動到目標行的末尾

' linestart'  位置移動到目前行的起始位置,此表達式前一定有一個空格

' lineend'  位置移動到目前行的末尾位置,此表達式前一定有一個空格

' wordstart'  位置移動到目前行的起始位置,此表達式前一定有一個空格

' wordend'  位置移動到目前行的末尾位置,此表達式前一定有一個空格

 

Text組件選擇字符的方法get()

Text組件的get()可以獲取所選的字符內容。

    語法:get(開始位置,結果位置)

位置,可以直接用: 行.列  格式,也可以用位置表示式來表示

下面有代碼來演示獲取Text內的文本字符。

from tkinter import *
 
root=Tk()
 
root.rowconfigure(0,weight=1) # 第1行 縮放權重為1
root.columnconfigure(0,weight=1) # 第1列 縮放權重為1
 
te1=Text(root) # 默認寬高
te1.grid(sticky=W+E+S+N) # te1向4邊擴展
 
scr1=Scrollbar(root)  # 垂直滾動條
scr1.grid(row=0,column=1,sticky=N+S) # scr1向上下擴展
 
te1.config(yscrollcommand = scr1.set) # 滾動設置互相綁定
scr1.config(command = te1.yview)  # 滾動設置互相綁定
 
for i in range(1001,1026): # 插入1001至1025
    te1.insert(END,str(i)+' tkinter基礎教程\n')
 
print(te1.get('1.0','1.end')) # 獲取:第1行內容
print(te1.get('1.5','1.12')) # 獲取:tkinter
print(te1.get('1.12','1.16')) # 獲取:基礎教程
print(te1.get('1.5','1.5+11 chars')) # 獲取:tkinter基礎教程
print(te1.get('1.0','1.0+2 lines')) # 獲取:前2行的內容
 
root.mainloop()

運行后,會輸出:

1001 tkinter基礎教程

tkinter

基礎教程

tkinter基礎教程

1001 tkinter基礎教程

1002 tkinter基礎教程

 系統會內定位置SEL_FIRST, SEL_LAST

在我們平時使用Text組件時,常會用鼠標拖動選中一些文字,如何用get()獲取鼠標選中的文字呢。其實,這種情況,系統會內定有SEL_FIRST, SEL_LAST 這2個位置記錄保存鼠標選中位置的起始位置和結束位置。下面有代碼來演示一下。 

from tkinter import *
 
root=Tk()
 
root.rowconfigure(0,weight=1) # 第1行 縮放權重為1
root.columnconfigure(0,weight=1) # 第1列 縮放權重為1
 
te1=Text(root) # 默認寬高
te1.grid(sticky=W+E+S+N) # te1向4邊擴展
 
scr1=Scrollbar(root)  # 垂直滾動條
scr1.grid(row=0,column=1,sticky=N+S) # scr1向上下擴展
 
te1.config(yscrollcommand = scr1.set) # 滾動設置互相綁定
scr1.config(command = te1.yview)  # 滾動設置互相綁定
 
for i in range(1001,1026): # 插入1001至1025
    te1.insert(END,str(i)+' tkinter基礎教程\n')
 
te1.bind("<ButtonRelease-1>",lambda event: print(te1.get(SEL_FIRST,SEL_LAST)))
# 綁定鼠標左鍵釋放事件,抬起鼠標按鍵,立即輸出鼠標選中的內容
root.mainloop()

 運行結果:

4.PNG

鼠標如下圖所示選中一段文字,釋放鼠標就會有文字輸出:

7 tkinter基礎教程

 

但上述代碼也有漏洞,如果沒有選中文字,會出現錯誤提示。改進方法就是去除匿名函數寫法,專門寫一個函數,函數里用 try: …… expect Tclerror: 來避免出現錯誤提示。

 

Text組件刪除字符方法delete()

語法:delete(開始位置,結束位置)

注:如果只有一個參數,就只刪除一個字符;有2個參數才刪除一段文本。

from tkinter import *
 
root=Tk()
 
te1=Text(root,width=35,height=4) 
te1.pack(fill=BOTH,expand=True)
 
te1.insert(END,'霧失樓臺,月迷津渡\n') 
te1.insert(END,'桃源望斷無尋處\n')
te1.insert(END,'可堪孤館閉春寒,杜鵑聲里斜陽暮')
 
but0=Button(root,text="刪除第1個字符",command=lambda:te1.delete('1.0'))
but0.pack(padx=2,fill=X)
but1=Button(root,text="刪除前2個字符",command=lambda:te1.delete('1.0','1.2'))
but1.pack(padx=2,fill=X)
but2=Button(root,text="刪除第2行",command=lambda:te1.delete('2.0','3.0'))
but2.pack(padx=2,fill=X)
but3=Button(root,text="刪除全部",command=lambda:te1.delete('1.0',END))
but3.pack(padx=2,fill=X)
 
root.mainloop()

運行結果

17.PNG

 

Text組件參數選項說明

Text創建語法: Text(父組件,參數……)

下面Text組件的相關參數:

選項

說明

autoseparators

是否自動插入一個分隔符,默認True

background 或 bg

組件的背景顏色

borderwidth 或 bd

組件的邊框寬度

cursor

鼠標光標樣式

exportselection

選中的文本是否可以被復制到剪貼板,默認True

font

組件的默認文本字體

foreground 或 fg

組件的前景色,字體顏色

height

Text組件的高度,單位是:行

highlightabckground

組件沒有焦點時的高亮邊框的顏色

highlightcolor

組件有焦點時的高亮邊框的顏色

highlightthickness

高亮邊框的寬度

insertbackground

插入光標的顏色,默認為'black'

insertborderwidth

插入光標的邊框寬度 ,默認為0

insertontime

插入光標閃爍的間隔時間,單位:毫秒

insertwidth

光標的寬度,默認為2像素

maxundo

最大的‘撤銷’操作次數,默認為0,為-1表示不限制

padx

水平方向上內容與邊框之間的間距,默認為1

pady

垂直方向上內容與邊框之間的間距,默認為1

relief

組件邊框樣式

selectbackground

選中文本的背景顏色

selectborderwidth

選中文本的邊框寬度

selectforeground

選中文本的字體顏色

setgrid

是否啟用網格控制,默認為False

spacing1

每一行的上面間距,如有折行,只在第一行起作用

spacing2

折行之間的行間距

spacing3

每一行的下面間距,如有折行,只在最后一行起作用

state

組件的狀態:NORMAL 和 DISABLED

tabs

定義按Tab鍵的移動距離

takefocus

是否可以使用Tab鍵將焦點轉移到本組件

undo

開啟undo/redo功能

width

組件的寬度,單位是:字符數

wrap

決定文本長度超過組件寬度如何換行:

NONE不換行    CHAR按字符換行    WORD按單詞自動換行

xscrollcommand

與滾動條組件在水平方向相關聯

yscrollcommand

與滾動條組件在垂直方向相關聯

 

Text組件屬性參數很多,但有些參數跟以前學過的其他組件的參數一樣的,用法也是一樣的,在這里我就不講解了,我選幾個Text組件特有的參數講一下, 有必要說明的是,有些參數,我本人測試也不是很成功。下面我是測試成功的一些參數的相關代碼。

selectbackground,selectforeground參數演示

from tkinter import *
 
root=Tk()
 
te1=Text(root,width=30,height=3,selectbackground='red',selectforeground='yellow')
# 選中文章紅底黃字
te1.pack()
 
te1.insert(END,'此文章由wb98.com原創')
 
root.mainloop()

運行結果:

a1.png

默認情況下,鼠標選中的文字是藍底白字,但是上圖告訴我們,通過代碼可以改鼠標選中文字為紅底白字。

insertbackground光標顏色改變

from tkinter import *
 
root=Tk()
 
te1=Text(root,width=30,height=3,background='lightblue',insertbackground='red')
# Text組件淺藍背景,紅色光標閃爍
te1.pack()
 
te1.insert(END,'此文章由wb98.com原創')
 
root.mainloop()

運行結果如下,光標的顏色改成了紅色。

a2.png

 

演示Text組件如何綁定水平滾動條:

from tkinter import *
 
root=Tk()
 
scr2=Scrollbar(orient=HORIZONTAL) # 水平滾動條
scr2.pack(side='bottom',fill=X)
 
te1=Text(root,width=30,height=4,wrap=NONE) # wrap=NONE 一定要加上
te1.pack(side='top',fill=BOTH,expand=True)
 
te1.config(xscrollcommand = scr2.set)
scr2.config(command =te1.xview)
 
te1.insert(END,'我用谷歌翻譯:中國,英國,美國,俄羅斯,翻譯成:\
China, United Kingdom, United States, Russia')
 
root.mainloop()

運行結果:

a3.png

以前講解過組件如何綁定一個水平滾動條,但Text組件有點不一樣中,它是可以自動換行的,如果自動換行,那水平滾動條綁定成功也沒有什么用。

這時,wrap參數就顯得很重要了,加入wrap=NONE后,文本只要沒有硬換行符,超過Text都不會換行,這時,超長看不到的文本就可以通過水平滾動條來查看了。

大家可以分別將wrap=WORD 和 wrap=CHAR 代替 wrap=NONE 測試一下。

wrap=WORD 是保證英文單詞做為一個整體來換行,對中文沒有什么意義。

wrap=CHAR 按照字符來換行,中英文都一樣。

這2種情況都會換行,綁定水平滾動條就沒有什么意義了。  丶丌皛

 

spacing1 spacing2 spacing3 這3個參數。

spacing1

每一行的上面間距,如有折行,只在第一行起作用

spacing2

折行之間的行間距

spacing3

每一行的下面間距,如有折行,只在最后一行起作用

 

在代碼里,這3個參數要分別代入Text的創建代碼中,效果才看得比較清楚。

from tkinter import *
 
root=Tk()
 # 以下分別用 spacing1=20,spacing2=20,spacing3=20 代入測試
te1=Text(root,width=35,height=4) # 測試1
# te1=Text(root,width=35,height=4,spacing1=20) # 測試2
# te1=Text(root,width=35,height=4,spacing2=20) # 測試3
# te1=Text(root,width=35,height=4,spacing3=20) # 測試4
 
te1.pack(fill=BOTH,expand=True)
 
te1.insert(END,'霧失樓臺,月迷津渡\n')
te1.insert(END,'桃源望斷無尋處\n')
te1.insert(END,'可堪孤館閉春寒,杜鵑聲里斜陽暮')
 
root.mainloop()

以上代碼,測試1,2,3,4運行的結果分別是:

a4.png

以上為默認狀態下,行與行之間沒有間距

 

a5.png

以上為spacing1=20,每行上面多出20個像素間距

注意,文本還是3行,并不是6行,只是行高多了20個像素

 

a6.png

以上為spacing2=20 運行后,看不出效果,上圖是用鼠標調整窗體寬度,讓文本折行,才看出效果。


a7.png

以上為spacing3=20 運行后的效果,每行下面多出20個像素

注意,文本還是3行,并不是6行,只是行高多了20個像素


書簽(Marks)講解

前面已經說過Text里面的文本內容的某個位置,一般用 “行.列” 這種方式來表示,但有些位置,我們在編程過程中需要用特別的名稱來標名,那就相當于為“行.列”取一個別名。

其實,tkinter內有默認的書簽,如 INSERT, END, CURRERNT, SEL_FIRST, SEL_LAST 等,這些內置的書簽是不能刪除的。

我們可以自己創建一個新的標簽,也可以刪除自己創建的標簽,常用書簽方法有:

index(書簽名) : 返回書簽的行和列

mark_set(書簽名,行.列位置) :在指定的行列位置創建一個標簽

mark_unset(書簽名) : 刪除指定的書簽及設置

 

書簽我把它說成是位置“行.列”取一個別名,是為了大家好理解,書簽就是一個位置,但它跟一般的“行.列”位置還有點區別,

1. “行.列”位置不能刪除,自己創建的書簽是可以刪除的

2. “行.列”位置是固定位置不能移動的,而書簽是可以移動的,如一個創建書簽位置之前插入了新的字符,那書簽往后移,而書簽位置之前的字符被刪除,書簽就會往前移。

你把書簽前后的字符都刪除了,也不能刪除已經創建好的書簽,除非你用mark_unset(書簽名)來刪除。

 

下面用代碼來演示一下書簽的運用:

from tkinter import *
 
root=Tk()
 
te1=Text(root,width=26,height=3) 
te1.grid(columnspan=2) 
 
te1.insert(END,'何老師的tkinter基礎教程')
 
te1.mark_set('A','1.10') # 在‘e’和‘r’之間創建一個書簽A
 
but1=Button(root,text="返回行.列",command=lambda:print(te1.index('A'))) # 返回書簽位置對應的行.列位置
but1.grid(row=1,column=0)
but2=Button(root,text="刪除書簽A",command=lambda:te1.mark_unset('A'))
but2.grid(row=1,column=1)
 
te1.focus_set() # 文本框得到焦點
te1.mark_set(INSERT,'1.10') # 設置Text組件的光標位置在e,r之間
 
root.mainloop()

運行結果

5.PNG

  運行后,我們首先點擊下面按鈕,得到書簽A的行.列位置1.10,然后,我們試著刪除書簽前后的字符,看看書簽A的位置變化,當我們把所有字符都刪除了,書簽A得到的位置是1.0,看來書簽無法通過刪除字符而刪除,只有一種辦法可以刪除自己創建的書簽:mark_unset(書簽名),所以當點擊“刪除書簽A”按鈕后,再點擊“返回行.列”按鈕,就會報錯,因為書簽的確被刪除了。

我們可以通過書簽創建方法來系統書簽INSERT設置一個新的位置,借此來設置光標的位置。但要注意,在此之前,一定要讓Text組件得到焦點才行。

  由上面這個小例子,可以看到,文本框的字符比較少時,書簽的功能還看不出優勢,如果文本框里的字符很多,而且插入,刪除字符多次,讓文本框的內容改動很大,只要有書簽名,就可以用index(書簽名),快速得到書簽的行.列位置。

 

標簽tag講解

Text 組件跟Entry,Lable等組件在字體方面可不一樣,其它字體只要設置一種字體,而Text 組件可以為同一組件內的不同的字符設置為不同的字體,顏色,大小。當我們為Text 組件內的一兩個字符或一段字符取一個名字時,這個名字就是一個標簽。

說白了,標簽就是你選定一段字符的名稱。為了不搞混,我來幫大家再區分一下,書簽是行.列位置的另一個名稱。Text 組件的標簽是一段選定的字符的名稱;書簽是一個位置,標簽是一段字符。

我們可以為Text 組件創建標簽,也可以刪除標簽,也可以為標簽設置一下,如為標簽設置字體,顏色等,設置成功后,這個標簽代表的一段字符就會表現出設置好的字體和顏色。

系統內有一個內置的標簽,那就是SEL,SEL就是你用鼠標選中的一段字符的標簽。

下面是標簽的一些常用的方法:

1. tag_add(標簽名,開始位置,結束位置) :為開始位置和結束位置之間的字符創建一個標簽名。

 

2. tag_config(標簽名,參數……) :為標簽設置字體,顏色等等各種參數。

 

3. tag_delete(標簽名) : 標簽被刪除,與此標簽相關的設置顯示效果都自動取消

 

4. tag_remove(標簽名) :標簽被刪除,但此標簽相關的設置顯示效果還起作用。

 

下面我用代碼來演示一下標簽的創建,設置。

from tkinter import *
 
root=Tk() # 源碼來自wb98.com
 
te1=Text(root,width=30,height=9) 
te1.grid(columnspan=2) 
 
# 先輸入字符
te1.insert(END,'零基礎學習tkinter基礎教程\n\n')
te1.insert(END,'網址:http://www.wb98.com\n\n')
 
# 再創建標簽
te1.tag_add('tag1','1.5','1.12') # 先為te1創建tag1標簽,確定范圍
te1.tag_config('tag1',background='lightyellow',foreground='red',font='黑體 12') # 再為tag1標簽進行設置
 
# 再設置標簽
te1.tag_add('tag2','3.3','3.end') # 先為te1創建tag2標簽,確定范圍
te1.tag_config('tag2',foreground='blue',font=('宋體',10,'underline')) # 再為tag2標簽進行設置
 
# 插入文本1,插入文本2,是先設置2個標簽,然后標簽設置用在insert()方法的第3個參數
te1.tag_config('tag3', foreground='red',underline=True)    # 紅字下劃線
te1.tag_config('tag4', foreground='blue',overstrike=True)  # 藍字刪除線
 
but1=Button(root,text="插入內容1",command=lambda:te1.insert(END,'python 入門知識\n\n','tag3')) # 插入的文本用tag3設置
but1.grid(row=1,column=0)
but2=Button(root,text="插入內容2",command=lambda:te1.insert(END,'python 入門知識',('tag3','tag4')))  # 插入的文本用tag3和tag4混合設置,相同的設置,后面的設置覆蓋以前的設置
but2.grid(row=1,column=1) 
 
root.mainloop()

運行結果

6.PNG

 

前面2行文本,是先插入內容,然后創建標簽,然后設置標簽,標簽設置成功,就會在文本上有所顯示,這種方法可以用于全部文本,也可以只用于部分文本。

 

點擊“插入內容1”按鈕,插入第3行文本,插入的文本用tag3標簽設置。

 

點擊“插入內容2”按鈕,插入第4行文本,插入文本,用tag3和tag4混合設置,由于tag_config(tag4,…) 是后于tag3設置的,后面如果跟前面有相同的設置,那后面的設置就會覆蓋以前的設置,所以,第4行,在字體顏色是采取tag4的設置,但下劃線設置,tag4由于沒有相關的設置,所以,第4行還是采用tag3的紅色下劃線設置。

注意:標簽設置的前先順序是由tag_config來決定的,不是由insert()的第3個參數的先后順序來決定。

 

內置標簽SEL

當我們用鼠標選定文本框中的某一段文本時,這一段文本就是SEL標簽的范圍,默認情況是,選定的文本是藍色背景,白色文字,我們可以用代碼為SEL標簽改變一為紅色背景,白色文字,同時也可以改變字體大小等。

代碼如下:

from tkinter import *
 
root = Tk()
 
te1=Text(root,width=30,height=4)
te1.pack(fill=BOTH,expand=True) 
 
te1.insert(END,'此文章來自wb98.com 相關資料可以到此網站下載。')
 
te1.tag_config(SEL,background='red',foreground='white',font='黑體 15')
 
te1.bind("<ButtonRelease-1>",lambda event:
    print( te1.index(SEL_FIRST),'-',te1.index(SEL_LAST)) )
 
mainloop()


運行后,鼠標選中一段文本,會看到選中字體大小及顏色的效果,也同時輸入系統內置的書簽SEL_FIRST和SEL_LAST的位置。

8.PNG

 

tag_add 用法:

語法: tag_add(標簽名,位置參數……)

      注:如果位置參數為偶數個,則自動配對,決定標簽的范圍,如果有多出一個參數,則多出的參數,決定這個位置后的一個字符。

 

看下面代碼,演示了5個位置參數的情況。

from tkinter import *
 
def biaoqian(n):
    te1.tag_delete('tag1') # 刪除標簽
    if n==1:
        te1.tag_add('tag1','1.0') #  1個位置參數
    elif n==2:
        te1.tag_add('tag1','1.1','1.5') # 2個位置參數
    elif n==3:
        te1.tag_add('tag1','1.0','1.3','1.5') # 3個位置參數
    elif n==4:
        te1.tag_add('tag1','1.0','1.3','1.5','1.12') # 4個位置參數
    elif n==5:
        te1.tag_add('tag1','1.0','1.3','1.5','1.12','1.14') # 5個位置參數
 
    te1.tag_config('tag1',background='lightyellow',foreground='red',font='黑體 12') # 再為標簽進行設置
 
root=Tk()
 
te1=Text(root,width=30,height=2) 
te1.grid(columnspan=5) 
 
te1.insert(END,'零基礎學習tkinter基礎教程\n\n')
        
but1=Button(root,text="標簽1",command=lambda:biaoqian(1)) # 標簽1
but1.grid(row=1,column=0)
but1=Button(root,text="標簽2",command=lambda:biaoqian(2)) # 標簽2
but1.grid(row=1,column=1)
but1=Button(root,text="標簽3",command=lambda:biaoqian(3)) # 標簽3
but1.grid(row=1,column=2)
but1=Button(root,text="標簽4",command=lambda:biaoqian(4)) # 標簽4
but1.grid(row=1,column=3)
but1=Button(root,text="標簽5",command=lambda:biaoqian(5)) # 標簽5
but1.grid(row=1,column=4)
 
root.mainloop()

運行結果

7.PNG

 

tag_config設置參數

我在前面寫的代碼,在 tag_config(標簽名,參數) 中,我寫的參數一般是字體,字體大小,顏色等,其實這個參數有很多選項,下面我把相關的選項列舉如下,有興趣的朋友,自行學習,自行測試相關參數。

選項

  說明

background

背景顏色

bgstipple

指定位圖作背景,background指定的顏色來填充

borderwidth

文本框邊框的寬度

fgstipple

指定位圖作前景色

font

字體

foreground

字體顏色,前景色

justify

文本對齊方式:LEFT,RIGHT,CENTER

imargin1

Tag指向文本的第一行的縮進

imargin2

Tag指向文本的除第一行外的其他行的縮進

offset

Tag指向文本相對于水平基線的相對距離

overstrike

刪除線

relief

Tag指向文本的邊框樣式

margin

Tag指向文本塊右側的縮進

spacing1

Tag指向文本的每一行與上方文本的間距,自動換行不算

spacing2

Tag指向文本中自動換行的各行間距,換行符\n不算

spacing3

Tag指向文本的每一行與下方文本的間距,自動換行不算

tabs

設置Tag指向文本塊中Tab按鍵的功能

underline

下劃線

wrap

一行文本超過Text的寬度時,是否換行及換行方式。NONE:不自動換行;CHAR:換字符自動換行;WORD:按單詞自動換行

 

以上有些參數跟Text組件屬性參數是一樣的,但一些以行為單位的參數在使用時要注意,如spacing1參數,在tag_config使用后,要看到效果,必須要用鼠標選中一行的第1個字符才能看到效果,如果鼠標選的字符不包含一行文本中的第1個字符是看不到效果的。

以下代碼,大家可以測試一下。

from tkinter import *
 
root=Tk()
 
te1=Text(root,width=35,height=6) 
 
te1.pack(fill=BOTH,expand=True)
 
te1.insert(END,'霧失樓臺,月迷津渡\n') 
te1.insert(END,'桃源望斷無尋處\n')
te1.insert(END,'可堪孤館閉春寒,杜鵑聲里斜陽暮')
 
te1.tag_config(SEL,spacing1=20) # 鼠標選中一行上面增加20個像素
 
root.mainloop()

  Text組件設置標簽后,可以為標簽范圍內的文本改字體,顏色,大小,對齊方法,行距等,我不一一講解,你對照上面的參數一一測試就是。

Text組件設置標簽后,這個標簽還可以綁定事件,是不是很神奇,比如,寫一個網址,你點擊它就可以用默認的瀏覽器打開它。

Text組件內的標簽綁定事件用的方法是: tag_bind()

用法: tag_bind(標簽名,綁定事件,調用的函數)

 

下面的代碼你運行測試一下,鼠標移動到網址上面,鼠標樣式變成手形,點擊就可以打開這個網址。

from tkinter import *
import webbrowser # 要導入這個模塊才可以打開網址
 
root=Tk()
 
te1=Text(root,width=35,height=3) 
 
te1.pack(fill=BOTH,expand=True)
 
te1.insert(END,'我的網址 http://www.wb98.com 何老師的濟亨網') 
 
te1.tag_add('wz','1.5','1.24') #('tag1','x1','x2')
te1.tag_config('wz',foreground='blue') # 鼠標選中一行上面增加20個像素
te1.tag_bind("wz", "<Enter>", lambda event:te1.config(cursor='hand2')) # 鼠標移入,鼠標樣式變手式
te1.tag_bind("wz", "<Leave>", lambda event:te1.config(cursor='xterm')) # 鼠標離開,鼠標樣式變 I
te1.tag_bind("wz", "<Button-1>", lambda event: webbrowser.open('http://www.wb98.com',new=1) ) # 鼠標點擊打開網址
 
root.mainloop()

運行結果:

23.PNG


Text組件要講解的知識太多了,我下一篇再接著講Text的相關知識,如虛擬事件,text插入圖片,按鈕等,text文本查找......

此文章來自:wb98.com  網站還有相關的系列課程文章,感興趣的可以前往。

來源:濟亨網

本文鏈接:http://www.chinaengraver.com/post/330.html

    << 上一篇 下一篇 >>

    湘公網安備 43011102000514號 - 湘ICP備08100508號

    2019年秋霞鲁丝片瓜皮_导航亚洲AV日韩AV永久无码_有没有哪些可以看片的免费的_国产色妞妞在线视频免费播放