Text
Text(文本)組件用于顯示和處理多行文本燥撞。在 Tkinter 的所有組件中,Text 組件顯得異常強(qiáng)大和靈活迷帜,適用于多種任務(wù)物舒。雖然該組件的主要目的是顯示多行文本,但它常常也被用于作為簡(jiǎn)單的文本編輯器和網(wǎng)頁瀏覽器使用瞬矩。
何時(shí)使用 Text 組件茶鉴?
Text 組件用于顯示文本文檔,包含純文本或格式化文本(使用不同字體景用,嵌入圖片涵叮,顯示鏈接,甚至是帶 CSS 格式的 HTML 等)伞插。因此割粮,它常常也被用于作為簡(jiǎn)單的文本編輯器和網(wǎng)頁瀏覽器使用。
用法
當(dāng)你創(chuàng)建一個(gè) Text 組件的時(shí)候媚污,它里邊是沒有內(nèi)容的舀瓢。為了給其插入內(nèi)容,你可以使用 insert() 方法以及 "insert" 或 "end" 索引號(hào):
from tkinter import *
root = Tk()
# width 單行可見的字符
# height 顯示的行數(shù)
text = Text(root, width=50, height=30, undo=True, autoseparators=False)
text.pack()
# INSERT 光標(biāo)處插入
# END 末尾處插入
text.insert(INSERT, '插入文字')
root.mainloop()
插入對(duì)象
from tkinter import *
#在 Text 組件中插入對(duì)象耗美,可以使用 window_create() 和 image_create() 方法
root = Tk()
# width 單行可見的字符
# height 顯示的行數(shù)
text = Text(root, width=50, height=30, undo=True, autoseparators=False)
text.pack()
# INSERT 光標(biāo)處插入
# END 末尾處插入
text.insert(INSERT, '插入組件')
def show():
print('我被點(diǎn)了一下~')
# 插入組件
bt = Button(root, text='點(diǎn)我', command=show, padx=10)
text.window_create(INSERT, window=bt)
text.insert(INSERT, '\n')
# 插入圖片
text.insert(INSERT, '插入圖片')
photo = PhotoImage(file='ico.png')
text.image_create(END, image=photo)
root.mainloop()
delete() 方法
from tkinter import *
# 刪除 Text 組件中的內(nèi)容可以用 delete() 方法京髓,下邊代碼用于刪除所有內(nèi)容(也包含 window 和 image 對(duì)象,但不會(huì)刪除 marks 的內(nèi)容):
root = Tk()
text = Text(root, width=20, height=5)
text.pack()
text.insert(INSERT, "You are good!")
text.delete(1.0, END)
root.mainloop()
將 state 選項(xiàng)從默認(rèn)的 "normal" 修改為 "disabled"商架,使得 Text 組件中的內(nèi)容為“只讀”形式堰怨。不過需要注意的是,當(dāng)你需要進(jìn)行任何修改的時(shí)候蛇摸,記得將 state 選項(xiàng)改回 "normal"备图,否則 insert() 和 delete() 方法都會(huì)失效。
get() 方法(僅獲取文本內(nèi)容):
from tkinter import *
import hashlib
root = Tk()
# width 單行可見的字符
# height 顯示的行數(shù)
text = Text(root, width=50, height=30, undo=True, autoseparators=False)
text.pack()
# INSERT 光標(biāo)處插入
# END 末尾處插入
text.insert(INSERT, '插入組件')
# 檢測(cè)內(nèi)容是否改變
def getSig(contents):
m = hashlib.md5(contents.encode())
# 獲取摘要 比較
return m.digest()
sig = getSig(text.get('1.0', END))
def check():
contents = text.get('1.0', END)
if sig != getSig(contents):
print('內(nèi)容有變動(dòng)')
else:
print('沒有變動(dòng)')
Button(root, text='檢查', command=check).pack()
root.mainloop()
index() 方法
from tkinter import *
#用于將所有支持的“索引”格式(請(qǐng)參考下方【Indexes 用法】)轉(zhuǎn)換為“行.列”格式的索引號(hào)
root = Tk()
text = Text(root, width=20, height=5)
text.pack()
print(text.index("insert"))
text.insert("insert", "You are good!")
print(text.index("insert"))
root.mainloop()
跟蹤一個(gè)位置,標(biāo)記
from tkinter import *
root = Tk()
text = Text(root, width=20, height=5)
text.pack()
text.insert(INSERT, "You are good!")
text.mark_set('here', '1.8')
text.insert('here', "very ")
root.mainloop()
search() 方法可以搜索 Text 組件中的內(nèi)容揽涮。
from tkinter import *
#你可以提供一個(gè)確切的目標(biāo)進(jìn)行搜索(默認(rèn))抠藕,也可以使用 Tcl 格式的正則表達(dá)式進(jìn)行搜索(需設(shè)置 regexp 選項(xiàng)為 True)
root = Tk()
text = Text(root, width=20, height=5)
text.pack()
text.insert(INSERT, 'I love FishC.com')
# 搜索
start = '1.0'
while True:
pos = text.search('o', start, stopindex=END)
if not pos:
break
print("找到了幻馁,位置是:", pos)
start = pos + '+1c' # 指向下一個(gè)字符
root.mainloop()
# 如果忽略 stopindex 選項(xiàng)立美,表示直到文本的末尾結(jié)束搜索。
#設(shè)置 backwards 選項(xiàng)為 True渊抽,則是修改搜索的方向(變?yōu)橄蚝笏阉餮┍辏敲?start 變量你應(yīng)該設(shè)置為 END颜说,stopindex 選項(xiàng)設(shè)置為 1.0,最后 "+1c" 改為 "-1c")
“恢復(fù)”和“撤銷”操作
from tkinter import *
root = Tk()
text = Text(root, width=50, height=30, undo=True, autoseparators=False)
text.pack()
text.insert(INSERT, 'I love FishC.com')
# 撤銷 恢復(fù)
# 撤銷操作 需要打開 undo=True Text(root, width=50, height=30,undo=True)
def back():
text.edit_undo()
def callback(event):
text.edit_separator()
# 自動(dòng)插入分隔符汰聋,撤銷時(shí)一個(gè)字一個(gè)字的撤銷门粪,默認(rèn)人工插入 autoseparators=False
# Text(root, width=50, height=30, undo=True, autoseparators=False)
# 每當(dāng)有按鍵操作的時(shí)候 插入一個(gè)分割符
text.bind('<Key>', callback)
Button(root, text='撤銷', command=back).pack()
root.mainloop()
Indexes 用法
Indexes(索引)是用來指向 Text 組件中文本的位置,跟 Python 的序列索引一樣烹困,Text 組件索引也是對(duì)應(yīng)實(shí)際字符之間的位置玄妈。
Tkinter 提供一系列不同的索引類型:
"line.column"(行/列)
"line.end"(某一行的末尾)
"insert"
"current"
"end"
user-defined marks
user-defined tags("tag.first","tag.last")
selection(SEL_FIRST髓梅,SEL_LAST)
window coordinate("@x,y")
embedded object name(window拟蜻,images)
expressions
"line.column"
from tkinter import *
root = Tk()
text = Text(root, width=50, height=30)
text.pack()
text.insert(INSERT, 'I love FishC.com')
# 使用 index() 方法可以將所有支持的“索引”格式轉(zhuǎn)換為“行/列”格式的索引號(hào)。
# 行/列是最基礎(chǔ)的索引方式枯饿,它們將索引位置的行號(hào)和列號(hào)以字符串的形式表示出來(中間以"."分隔酝锅,例如"1.0")。
# 需要注意的是奢方,行號(hào)以1開始搔扁,列號(hào)則以0開始。你還可以使用以下語法構(gòu)建索引:"%d.%d" % (line, column)
# 指定超出現(xiàn)有文本的最后一行的行號(hào)蟋字,或超出一行中列數(shù)的列號(hào)都不會(huì)引發(fā)錯(cuò)誤稿蹲。對(duì)于這樣的指定,Tkinter解釋為已有內(nèi)容的末尾的下一個(gè)位置鹊奖。
# 需要注意的是苛聘,使用行/列的索引方式看起來像是浮點(diǎn)值。其實(shí)不只像而已忠聚,你在需要指定索引的時(shí)候使用浮點(diǎn)值代替也是可以的
print(text.get(1.2, 1.6))
root.mainloop()
"line.end"
from tkinter import *
root = Tk()
text = Text(root, width=50, height=30)
text.pack()
text.insert(INSERT, 'I love FishC.com')
#行號(hào)加上字符串 ".end" 的格式表示為該行最后一個(gè)字符的位置
text.insert("insert", "I love Python")
print(text.get("1.2", "1.end"))
# 結(jié)果 ;love FishC.comI love Python
root.mainloop()
"insert"
對(duì)應(yīng)插入光標(biāo)的位置设哗。
"current"
對(duì)應(yīng)與鼠標(biāo)坐標(biāo)最接近的位置。不過两蟀,如果你緊按鼠標(biāo)任何一個(gè)按鈕网梢,它會(huì)直到你松開它才響應(yīng)。
"end"
對(duì)應(yīng) Text 組件的文本緩沖區(qū)最后一個(gè)字符的下一個(gè)位置垫竞。
user-defined marks
user-defined marks 是對(duì) Text 組件中位置的命名澎粟。"insert" 和 "current" 是兩個(gè)預(yù)先命名好的 marks,除此之外你可以自定義 marks(請(qǐng)參考下方【Marks 用法】)欢瞪。
User-defined tags
User-defined tags 代表可以分配給 Text 組件的特殊事件綁定和風(fēng)格(請(qǐng)參考下方【Tags 用法】)活烙。
你可以使用 "tag.first"(使用 tag 的文本的第一個(gè)字符之前)和 "tag.last"(使用 tag 的文本的最后一個(gè)字符之后)語法表示標(biāo)簽的范圍。
"%s.first" % tagname
"%s.last" % tagname
如果查無此 tag遣鼓,那么 Tkinter 會(huì)拋出一個(gè)TclError 異常啸盏。
selection(SEL_FIRST,SEL_LAST)
selection 是一個(gè)名為 SEL(或 "sel")的特殊 tag骑祟,表示當(dāng)前被選中的范圍回懦,你可以使用 SEL_FIRST 到 SEL_LAST 來表示這個(gè)范圍。如果沒有選中的內(nèi)容次企,那么 Tkinter 會(huì)拋出一個(gè)TclError 異常怯晕。
window coordinate("@x,y")
你還可以使用窗口坐標(biāo)作為索引。例如在一個(gè)事件綁定中缸棵,你可以使用以下代碼找到最接近鼠標(biāo)位置的字符:
"@%d,%d" % (event.x, event.y)
embedded object name(window舟茶,images)
embedded object name
用于指向在 Text 組件中嵌入的 window 和 image 對(duì)象。要引用一個(gè) window堵第,只要簡(jiǎn)單地將一個(gè) Tkinter 組件實(shí)例作為索引即可吧凉。引用一個(gè)嵌入的 image,只需使用相應(yīng)的 PhotoImage 和 BitmapImage 對(duì)象踏志。
expressions
expressions 用于修改任何格式的索引阀捅,用字符串的形式實(shí)現(xiàn)修改索引的表達(dá)式。
具體表達(dá)式實(shí)現(xiàn)如下:
"+ count chars"
- 將索引向前(->)移動(dòng) count 個(gè)字符
- 可以越過換行符针余,但不能超過 END 的位置
"- count chars"
- 將索引向后(<-)移動(dòng) count 個(gè)字符
- 可以越過換行符饲鄙,但不能超過 "1.0" 的位置
"+ count lines"
- 將索引向前(->)移動(dòng) count 行
- 索引會(huì)盡量保持與移動(dòng)前在同一列上,但如果移動(dòng)后的那一行字符太少圆雁,將移動(dòng)到該行的末尾
"- count lines"
- 將索引向后(<-)移動(dòng) count 行
- 索引會(huì)盡量保持與移動(dòng)前在同一列上傍妒,但如果移動(dòng)后的那一行字符太少,將移動(dòng)到該行的末尾
" linestart"
- 將索引移動(dòng)到當(dāng)前索引所在行的起始位置
- 注意摸柄,使用該表達(dá)式前邊必須有一個(gè)空格隔開
" lineend"
- 將索引移動(dòng)到當(dāng)前索引所在行的末尾
- 注意颤练,使用該表達(dá)式前邊必須有一個(gè)空格隔開
" wordstart"
- 將索引移動(dòng)到當(dāng)前索引指向的單詞的開頭
- 單詞的定義是一系列字母、數(shù)字驱负、下劃線或任何非空白字符的組合
- 注意嗦玖,使用該表達(dá)式前邊必須有一個(gè)空格隔開
" wordend"
- 將索引移動(dòng)到當(dāng)前索引指向的單詞的末尾
- 單詞的定義是一系列字母、數(shù)字跃脊、下劃線或任何非空白字符的組合
- 注意宇挫,使用該表達(dá)式前邊必須有一個(gè)空格隔開
TIPS:只要結(jié)果不產(chǎn)生歧義,關(guān)鍵字可以被縮寫酪术,空格也可以省略器瘪。例如:"+ 5 chars" 可以簡(jiǎn)寫成 "+5c"
在實(shí)現(xiàn)中翠储,為了確保表達(dá)式為普通字符串,你可以使用 str 或格式化操作來創(chuàng)建一個(gè)表達(dá)式字符串橡疼。下邊例子演示了如何刪除插入光標(biāo)前邊的一個(gè)字符:
def backspace(event):
event.widget.delete("%s-1c" %"insert" , "insert")
Marks 用法
Marks(標(biāo)記)通常是嵌入到 Text 組件文本中的不可見對(duì)象援所。事實(shí)上 Marks 是指定字符間的位置,并跟隨相應(yīng)的字符一起移動(dòng)欣除。Marks 有 "insert"住拭,"current" 和 user-defined marks(用戶自定義的 Marks)。其中历帚,"insert" 和 "current" 是 Tkinter 預(yù)定義的特殊 Marks滔岳,它們不能夠被刪除。
"insert" 用于指定當(dāng)前插入光標(biāo)的位置挽牢,Tkinter 會(huì)在該位置繪制一個(gè)閃爍的光標(biāo)(因此并不是所有的 Marks 都不可見)谱煤。
"current" 用于指定與鼠標(biāo)坐標(biāo)最接近的位置。不過禽拔,如果你緊按鼠標(biāo)任何一個(gè)按鈕趴俘,它會(huì)直到你松開它才響應(yīng)。
你還可以自定義任意數(shù)量的 Marks奏赘,Marks 的名字是由普通字符串組成寥闪,可以是除了空白字符外的任何字符(為了避免歧義,你應(yīng)該起一個(gè)有意義的名字)磨淌。使用 mark_set() 方法創(chuàng)建和移動(dòng) Marks疲憋。
如果你在一個(gè) Mark 標(biāo)記的位置之前插入或刪除文本,那么 Mark 跟著一并移動(dòng)梁只。刪除 Marks 你需要使用 mark_unset() 方法缚柳,刪除 Mark 周圍的文本并不會(huì)刪除 Mark 本身。
如果有做相關(guān)練習(xí)的搪锣,應(yīng)該會(huì)被 Mark 的很多特性所疑惑秋忙,在準(zhǔn)備這個(gè)內(nèi)容的時(shí)候也很是迷惑,找了不知多少文檔......最后總結(jié)為下邊幾個(gè)例子講解:
例1构舟,Mark 事實(shí)上就是索引灰追,用于表示位置:
import tkinter as tk
root = tk.Tk()
text = tk.Text(root, width = 30, heigh = 3)
text.pack()
text.insert("insert", "I love Python")
text.mark_set("here", "1.2")
text.insert("here", "插")
root.mainloop()
例2,如果 Mark 前邊的內(nèi)容發(fā)生改變狗超,那么 Mark 的位置也會(huì)跟著移動(dòng)(說白了就是 Mark 會(huì)“記住”它后邊的那貨~):
text.insert("insert", "I love Python")
text.mark_set("here", "1.2")
text.insert("here", "插")
text.insert("here", "入")
例3弹澎,如果 Mark 周圍的文本被刪除了,Mark 仍然還在噢(只是它后邊的那貨被刪除了努咐,所以它六神無主苦蒿,只能初始化為 "1.0"):
text.insert("insert", "I love Python")
text.mark_set("here", "1.2")
text.insert("here", "插")
text.delete("1.0", "end")
text.insert("here", "入")
例4,只有 mark_unset() 方法可以解除 Mark 的封由浴:
text.insert("insert", "I love Python")
text.mark_set("here", "1.2")
text.insert("here", "插")
text.mark_unset("here")
text.delete("1.0", "end")
text.insert("here", "入")
例5佩迟,插入到 Mark 的右側(cè)团滥,通過 mark_gravity() 方法實(shí)現(xiàn)(對(duì)比例2):
text.insert("insert", "I love Python")
text.mark_set("here", "1.2")
text.mark_gravity("here", "left") #默認(rèn)是 "right"
text.insert("here", "插")
text.insert("here", "入")
Tags 用法
Tags(標(biāo)簽)通常用于改變 Text 組件中內(nèi)容的樣式和功能。你可以修改文本的字體报强、尺寸和顏色灸姊。另外,Tags 還允許你將文本躺涝、嵌入的組件和圖片與鍵盤和鼠標(biāo)等事件相關(guān)聯(lián)。除了 user-defined tags(用戶自定義的 Tags)扼雏,還有一個(gè)預(yù)定義的特殊 Tag:SEL坚嗜。
SEL(或 "sel")用于表示對(duì)應(yīng)的選中內(nèi)容(如果有的話)。
你可以自定義任意數(shù)量的 Tags诗充,Tags 的名字是由普通字符串組成苍蔬,可以是除了空白字符外的任何字符。另外蝴蜓,任何文本內(nèi)容都支持多個(gè) Tags 描述碟绑,任何 Tag 也可以用于描述多個(gè)不同的文本內(nèi)容。
為指定文本添加 Tags 可以使用 tag_add() 方法:
from tkinter import *
root = Tk()
text = Text(root, width=50, height=30, undo=True, autoseparators=False)
text.pack()
text.insert(INSERT, 'I love FishC.com')
# 行數(shù)從1開始 列從0開始
# 第一個(gè)參數(shù) tag的名字 任意
# 第二個(gè)參數(shù) 范圍:1.7(第一行的第八列)到1.12(第一行第13列)茎匠,單獨(dú)的1.14
text.tag_add('tag1', '1.7', '1.12', '1.14')
text.tag_config('tag1', background='yellow', foreground='red')
# 如果對(duì)同一個(gè)范圍內(nèi)的文本加上多個(gè)Tags格仲,并且設(shè)置相同的選項(xiàng),那么新創(chuàng)建的Tag樣式會(huì)覆蓋比較舊的Tag
# 例如 兩個(gè)參數(shù)诵冒,有一個(gè)改變了凯肋,那么沒變的參數(shù) 還是用之前的
text.tag_add('tag2', '1.7', '1.12', '1.14')
text.tag_config('tag2', background='blue')
root.mainloop()
tag_congif() 方法可以使用的選項(xiàng):
background
- 指定該 Tag 所描述的內(nèi)容的背景顏色
- 注意:bg 并不是該選項(xiàng)的縮寫,在這里 bg 被解釋為 bgstipple 選項(xiàng)的縮寫
bgstipple
- 指定一個(gè)位圖作為背景汽馋,并使用 background 選項(xiàng)指定的顏色填充
- 只有設(shè)置了 background 選項(xiàng)該選項(xiàng)才會(huì)生效
- 默認(rèn)的標(biāo)準(zhǔn)位圖有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question' 和 'warning'
borderwidth
- 指定文本框的寬度
- 默認(rèn)值是 0
- 只有設(shè)置了 relief 選項(xiàng)該選項(xiàng)才會(huì)生效
- 注意:該選項(xiàng)不能使用 bd 縮寫
fgstipple
- 指定一個(gè)位圖作為前景色
- 默認(rèn)的標(biāo)準(zhǔn)位圖有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question' 和 'warning'
font
- 指定該 Tag 所描述的內(nèi)容使用的字體
foreground
- 指定該 Tag 所描述的內(nèi)容的前景色
- 注意:fg 并不是該選項(xiàng)的縮寫侮东,在這里 fg 被解釋為 fgstipple 選項(xiàng)的縮寫
justify
1.控制文本的對(duì)齊方式
- 默認(rèn)是 "left"(左對(duì)齊),還可以選擇 "right"(右對(duì)齊)和 "center"(居中)
- 注意:需要將 Tag 指向該行的第一個(gè)字符豹芯,該選項(xiàng)才能生效
lmargin1
- 設(shè)置 Tag 指向的文本塊第一行的縮進(jìn)
- 默認(rèn)值是 0
- 注意:需要將 Tag 指向該文本塊的第一個(gè)字符或整個(gè)文本塊悄雅,該選項(xiàng)才能生效
lmargin2
- 設(shè)置 Tag 指向的文本塊除了第一行其他行的縮進(jìn)
- 默認(rèn)值是 0
- 注意:需要將 Tag 指向整個(gè)文本塊,該選項(xiàng)才能生效
offset
- 設(shè)置 Tag 指向的文本相對(duì)于基線的偏移距離
- 可以控制文本相對(duì)于基線是升高(正數(shù)值)或者降低(負(fù)數(shù)值)
- 默認(rèn)值是 0
overstrike
- 在 Tag 指定的文本范圍畫一條刪除線
- 默認(rèn)值是 False
relief
- 指定 Tag 對(duì)應(yīng)范圍的文本的邊框樣式
- 可以使用的值有:"sunken", "raised", "groove", "rifge" 或 "flat"
- 默認(rèn)值是 "flat"(沒有邊框)
rmargin
- 設(shè)置 Tag 指向的文本塊右側(cè)的縮進(jìn)
- 默認(rèn)值是 0
spacing1
- 設(shè)置 Tag 所描述的文本塊中每一行與上方的空白間隔
- 注意:自動(dòng)換行不算
- 默認(rèn)值是 0
spacing2
- 設(shè)置 Tag 所描述的文本塊中自動(dòng)換行的各行間的空白間隔
- 注意:換行符('\n')不算
- 默認(rèn)值是 0
spacing3
- 設(shè)置 Tag 所描述的文本塊中每一行與下方的空白間隔
- 注意:自動(dòng)換行不算
- 默認(rèn)值是 0
tabs
- 定制 Tag 所描述的文本塊中 Tab 按鍵的功能
- 默認(rèn) Tab 被定義為 8 個(gè)字符的寬度
- 你還可以定義多個(gè)制表位:tabs=('3c', '5c', '12c') 表示前 3 個(gè) Tab 寬度分別為 3厘米铁蹈,5厘米宽闲,12厘米,接著的 Tab 按照最后兩個(gè)的差值計(jì)算握牧,即:19厘米便锨,26厘米,33厘米
- 你應(yīng)該注意到了我碟,它上邊 'c' 的含義是“厘米”而不是“字符”放案,還可以選擇的單位有 'i'(英寸),'m'(毫米)和 'p'(DPI矫俺,大約是 '1i' 等于 '72p')
- 如果是一個(gè)整型值吱殉,則單位是像素
underline
- 該選項(xiàng)設(shè)置為 True 的話掸冤,則 Tag 所描述的范圍內(nèi)文本將被畫上下劃線
- 默認(rèn)值是 False
wrap
- 設(shè)置當(dāng)一行文本的長(zhǎng)度超過 width 選項(xiàng)設(shè)置的寬度時(shí),是否自動(dòng)換行
- 該選項(xiàng)的值可以是:"none"(不自動(dòng)換行)友雳,"char"(默認(rèn))(按字符自動(dòng)換行)和 "word"(按單詞自動(dòng)換行)
tag_raise() 和 tag_lower() 方法來提高和降低某個(gè) Tag 的優(yōu)先級(jí)稿湿。
import tkinter as tk
root = tk.Tk()
text = tk.Text(root, width=40, height=5)
text.pack()
text.tag_config("tag1", background="yellow", foreground="red")
text.tag_config("tag2", foreground="green")
text.tag_lower("tag2")
text.insert("insert", "I love Python!", ("tag2", "tag1"))
root.mainloop()
事件綁定
from tkinter import *
import webbrowser
root = Tk()
text = Text(root, width=50, height=30)
text.pack()
text.insert(INSERT, 'I love FishC.com')
# 事件綁定
text.tag_add('link', '1.7', '1.16')
text.tag_config('link', foreground='blue', underline=True)
def show_hand_cursor(event):
text.config(cursor='arrow')
def show_xterm_cursor(event):
text.config(cursor='xterm')
def click(event):
webbrowser.open('http://www.baidu.com')
# 鼠標(biāo)停留在文字上的時(shí)候
text.tag_bind('link', '<Enter>', show_hand_cursor)
# 鼠標(biāo)離開文字的時(shí)候
text.tag_bind('link', '<Leave>', show_xterm_cursor)
# 左鍵點(diǎn)擊
text.tag_bind('link', '<Button-1>', click)
root.mainloop()
參數(shù)
autoseparators
- 指定實(shí)現(xiàn)“撤銷”操作的時(shí)候是否自動(dòng)插入一個(gè)“分隔符”(用于分隔操作記錄)
- 默認(rèn)值是 True
- 詳見上方用法【“撤銷”和“恢復(fù)”操作】
background / bg
- 設(shè)置 Text 組件的背景顏色
- 注意:通過使用 Tags 可以使 Text 組件中的文本支持多種背景顏色顯示(請(qǐng)參考上方【Tags 用法】)
borderwidth / bd
- 設(shè)置 Entry 的邊框?qū)挾?/li>
- 默認(rèn)值是 1 像素
cursor
- 指定當(dāng)鼠標(biāo)在 Text 組件上飄過的時(shí)候的鼠標(biāo)樣式
- 默認(rèn)值由系統(tǒng)指定
exportselection
- 指定選中的文本是否可以被復(fù)制到剪貼板
- 默認(rèn)值是 True
- 可以修改為 False 表示不允許復(fù)制文本
font
- 設(shè)置 Text 組件中文本的默認(rèn)字體
- 注意:通過使用 Tags 可以使 Text 組件中的文本支持多種字體顯示(請(qǐng)參考上方【Tags 用法】)
foreground / fg
- 設(shè)置 Text 組件中文本的顏色
- 注意:通過使用 Tags 可以使 Text 組件中的文本支持多種顏色顯示(請(qǐng)參考上方【Tags 用法】)
height
- 設(shè)置 Text 組件的高度
- 注意:?jiǎn)挝皇切袛?shù),不是像素噢
highlightbackground
- 指定當(dāng) Text 組件沒有獲得焦點(diǎn)的時(shí)候高亮邊框的顏色
- 默認(rèn)值由系統(tǒng)指定
highlightcolor
- 指定當(dāng) Text 組件獲得焦點(diǎn)的時(shí)候高亮邊框的顏色
- 默認(rèn)值由系統(tǒng)指定
highlightthickness
- 指定高亮邊框的寬度
- 默認(rèn)值是 0
insertbackground
- 設(shè)置插入光標(biāo)的顏色
- 默認(rèn)是 BLACK(或 "black")
insertborderwidth
- 設(shè)置插入光標(biāo)的邊框?qū)挾?/li>
- 默認(rèn)值是 0
- 提示:你得設(shè)置 insertwidth 選項(xiàng)為比較大的數(shù)值才能看出來噢
insertofftime
- 該選項(xiàng)控制光標(biāo)的閃爍頻率(滅)
- 單位是毫秒
insertontime
- 該選項(xiàng)控制光標(biāo)的閃爍頻率(亮)
- 單位是毫秒
insertwidth
- 指定光標(biāo)的寬度
- 默認(rèn)值是 2 像素
maxundo
- 設(shè)置允許“撤銷”操作的最大次數(shù)
- 默認(rèn)值是 0
- 設(shè)置為 -1 表示不限制
padx
- 指定水平方向上的額外間距(內(nèi)容和邊框間)
- 默認(rèn)值是 1
pady
- 指定垂直方向上的額外間距(內(nèi)容和邊框間)
- 默認(rèn)值是 1
relief
- 指定邊框樣式
- 默認(rèn)值是 "sunken"
- 其他可以選擇的值是 "flat"押赊,"raised"饺藤,"groove" 和 "ridge"
selectbackground
- 指定被選中文本的背景顏色
- 默認(rèn)值由系統(tǒng)指定
selectborderwidth
- 指定被選中文本的邊框?qū)挾?/li>
- 默認(rèn)值是 0
selectforeground
- 指定被選中文本的字體顏色
- 默認(rèn)值由系統(tǒng)指定
setgrid
- 指定一個(gè)布爾類型的值,確定是否啟用網(wǎng)格控制
- 默認(rèn)值是 False
spacing1
- 指定 Text 組件的文本塊中每一行與上方的空白間隔
- 注意:自動(dòng)換行不算
- 默認(rèn)值是 0
spacing2
- 指定 Text 組件的文本塊中自動(dòng)換行的各行間的空白間隔
- 注意:換行符('\n')不算
- 默認(rèn)值是 0
spacing3
- 指定 Text 組件的文本中每一行與下方的空白間隔
- 注意:自動(dòng)換行不算
- 默認(rèn)值是 0
state
- 默認(rèn)情況下 Text 組件響應(yīng)鍵盤和鼠標(biāo)事件("normal")
- 如果將該選項(xiàng)的值設(shè)置為 "disabled"流礁,那么上述響應(yīng)就不會(huì)發(fā)生涕俗,并且你無法修改里邊的內(nèi)容
tabs
- 定制 Tag 所描述的文本塊中 Tab 按鍵的功能
- 默認(rèn) Tab 被定義為 8 個(gè)字符的寬度
- 你還可以定義多個(gè)制表位:tabs=('3c', '5c', '12c') 表示前 3 個(gè) Tab 寬度分別為 3厘米,5厘米神帅,12厘米再姑,接著的 Tab 按照最后兩個(gè)的差值計(jì)算,即:19厘米找御,26厘米元镀,33厘米
- 你應(yīng)該注意到了,它上邊 'c' 的含義是“厘米”而不是“字符”霎桅,還可以選擇的單位有 'i'(英寸)栖疑,'m'(毫米)和 'p'(DPI,大約是 '1i' 等于 '72p')
- 如果是一個(gè)整型值滔驶,則單位是像素
takefocus
- 指定使用 Tab 鍵可以將焦點(diǎn)移動(dòng)到 Text 組件中
- 默認(rèn)是開啟的蔽挠,可以將該選項(xiàng)設(shè)置為 False 避免焦點(diǎn)在此 Text 組件中
undo
- 該選項(xiàng)設(shè)置為 True 開啟“撤銷”功能
- 該選項(xiàng)設(shè)置為 False 關(guān)閉“撤銷”功能
- 默認(rèn)值是 False
width
- 設(shè)置 Text 組件的寬度
- 注意:?jiǎn)挝皇亲址麛?shù),因此 Text 組件的實(shí)際寬度還取決于字體的大小
wrap
- 設(shè)置當(dāng)一行文本的長(zhǎng)度超過 width 選項(xiàng)設(shè)置的寬度時(shí)瓜浸,是否自動(dòng)換行
- 該選項(xiàng)的值可以是:"none"(不自動(dòng)換行)澳淑,"char"(按字符自動(dòng)換行)和 "word"(按單詞自動(dòng)換行)
xscrollcommand
- 與 scrollbar(滾動(dòng)條)組件相關(guān)聯(lián)(水平方向)
- 使用方法可以參考:Scrollbar 組件
yscrollcommand
- 與 scrollbar(滾動(dòng)條)組件相關(guān)聯(lián)(垂直方向)
- 使用方法可以參考:Scrollbar 組件
方法
bbox(index)
-- 返回給定索引指定的字符的邊界框
-- 返回值是一個(gè) 4 元組:(x, y, width, height)
-- 如果該字符是不可見的,那么返回 None
-- 注意:只有當(dāng) Text 組件被更新的時(shí)候該方法才有效插佛,可以使用 update_idletasks() 方法先更新 Text 組件
compare(index1, op, index2)
-- 返回對(duì)比 index1 和 index2 指定的兩個(gè)字符的結(jié)果
-- op 是操作符:'<', '<=', '==', '>=', '>' 或 '!='(不支持 Python 的 '<>' 操作符)
-- 返回布爾類型的值表示對(duì)比的結(jié)果
debug(boolean=None)
-- 開啟或關(guān)閉 Debug 狀態(tài)
delete(start, end=None)
-- 刪除給定范圍的文本或嵌入對(duì)象
-- 如果在給定范圍內(nèi)有任何 Marks 標(biāo)記的位置杠巡,則將 Marks 移動(dòng)到 start 參數(shù)開始的位置
dlineinfo(index)
-- 返回給定索引指定的字符所在行的邊界框
-- 返回值是一個(gè) 5 元組:(x, y, width, height, offset),offset 表示從該行的頂端到基線的偏移
-- 如果該行不可見雇寇,則返回 None
-- 注意:只有當(dāng) Text 組件被更新的時(shí)候該方法才有效氢拥,可以使用 update_idletasks() 方法先更新 Text 組件
dump(index1, index2=None, command=None, **kw)
-- 返回 index1 和 index2 之間的內(nèi)容
-- 返回的值是一個(gè)由 3 元組(關(guān)鍵詞,值锨侯,索引)組成的列表嫩海,關(guān)鍵詞參數(shù)的順序?yàn)椋篴ll, image, mark, tag, text, window
-- 默認(rèn)關(guān)鍵詞是 'all',表示全部關(guān)鍵詞均為選中狀態(tài)
-- 如果需要篩選個(gè)別關(guān)鍵詞囚痴,可以用 dump(index1, index2, image=True, text=True) 這樣的形式調(diào)用
-- 如果指定了 command 函數(shù)叁怪,那么會(huì)為列表中的每一個(gè)三元組作為參數(shù)調(diào)用一次該函數(shù)(這種情況下,dump() 不返回值)
edit_modified(arg=None)
-- 該方法用于查詢和設(shè)置 modified 標(biāo)志(該標(biāo)標(biāo)志用于追蹤 Text 組件的內(nèi)容是否發(fā)生變化)
-- 如果不指定 arg 參數(shù)深滚,那么返回 modified 標(biāo)志是否被設(shè)置
-- 你可以傳遞顯式地使用 True 或 False 作為參數(shù)來設(shè)置或清除 modified 標(biāo)志
-- 任何代碼或用戶的插入或刪除文本操作奕谭,“撤銷”或“恢復(fù)”操作涣觉,都會(huì)是的 modified 標(biāo)志被設(shè)置
edit_redo(self)
-- “恢復(fù)”上一次的“撤銷”操作
-- 如果 undo 選項(xiàng)為 False,該方法無效
-- 詳見上方用法【“撤銷”和“恢復(fù)”操作】
edit_reset()
-- 清空存放操作記錄的棧
edit_separator()
-- 插入一個(gè)“分隔符”到存放操作記錄的棧中血柳,用于表示已經(jīng)完成一次完整的操作
-- 如果 undo 選項(xiàng)為 False官册,該方法無效
-- 詳見上方用法【“撤銷”和“恢復(fù)”操作】
edit_undo()
-- 撤銷最近一次操作
-- 如果 undo 選項(xiàng)為 False,該方法無效
-- 詳見上方用法【“撤銷”和“恢復(fù)”操作】
get(index1, index2=None)
-- 返回 index1 到 index2(不包含)之間的文本
-- 如果 index2 參數(shù)忽略难捌,則返回一個(gè)字符
-- 如果包含 image 和 window 的嵌入對(duì)象膝宁,均被忽略
-- 如果包含有多行文本,那么自動(dòng)插入換行符('\n')
image_cget(index, option)
-- 返回 index 參數(shù)指定的嵌入 image 對(duì)象的 option 選項(xiàng)的值
-- 如果給定的位置沒有嵌入 image 對(duì)象根吁,則拋出 TclError 異常
image_configure(index, **options)
-- 修改 index 參數(shù)指定的嵌入 image 對(duì)象的一個(gè)或多個(gè) option 選項(xiàng)的值
-- 如果給定的位置沒有嵌入 image 對(duì)象员淫,則拋出 TclError 異常
image_create(index, cnf={}, **kw)
-- 在 index 參數(shù)指定的位置嵌入一個(gè) image 對(duì)象
-- 該 image 對(duì)象必須是 Tkinter 的 PhotoImage 或 BitmapImage 實(shí)例
-- 可選選項(xiàng) align:設(shè)定此圖像的垂直對(duì)齊,可以是 "top"婴栽、"center"监署、"bottom" 或 "baseline"
-- 可選選項(xiàng) image:PhotoImage 或 BitmapImage 對(duì)象
-- 可選選項(xiàng) name:你可以為該圖像實(shí)例命名合砂,如果你忽略此選項(xiàng),那么 Tkinter 會(huì)自動(dòng)為其取一個(gè)獨(dú)一無二的名字访敌。
-- 可選選項(xiàng) padx:設(shè)置水平方向上的額外間距
-- 可選選項(xiàng) pady:設(shè)置垂直方向上的額外間距
image_names()
-- 返回 Text 組件中嵌入的所有 image 對(duì)象的名字
index(index)
-- 將 index 參數(shù)指定的位置以 "line.column" 的索引形式返回
-- index 參數(shù)支持任何格式的索引
insert(index, text, *tags)
-- 在 index 參數(shù)指定的位置插入字符串
-- 可選參數(shù) tags 用于指定文本的樣式
-- 詳見上方【Tags 用法】
mark_gravity(self, markName, direction=None)
-- 設(shè)置 Mark 的方向挤聘,可以是 "left" 或 "right"(默認(rèn)是 "right"轰枝,即如果在 Mark 處插入文本的話,Mark 將發(fā)生相應(yīng)的移動(dòng)以保持在插入文本的右側(cè))
-- 如果設(shè)置為 "left"组去,那么在 Mark 處插入文本并不會(huì)移動(dòng) Mark(因?yàn)?Mark 在插入文本的左側(cè))
-- 如果忽略 direction 參數(shù)鞍陨,則返回指定 Mark 的方向
-- 詳見上方【Marks 用法】
mark_names()
-- 返回 Text 組件中所有 Marks 的名字
-- 包括兩個(gè)特殊 Mark:"insert" 和 "current"
-- 注意:"end" 是特殊的索引,不是 Mark
mark_next(index)
-- 返回在 index 指定的位置后邊的一個(gè) Mark 的名字
-- 如果不存在則返回空字符串
mark_previous(index)
-- 返回在 index 指定的位置前邊的一個(gè) Mark 的名字
-- 如果不存在則返回空字符串
mark_set(markName, index)
-- 移動(dòng) Mark 到 index 參數(shù)指定的位置
-- 如果 markName 參數(shù)指定的 Mark 不存在从隆,則創(chuàng)建一個(gè)新的 Mark
mark_unset(*markNames)
-- 刪除 markNames 指定的 Marks
-- 不能刪除預(yù)定義的 "insert" 和 "current"
replace(index1, index2, chars, *args)
-- 將 index1 到 index2 之間的內(nèi)容替換為 chars 參數(shù)指定的字符串
-- 如果需要為替換的內(nèi)容添加 Tag诚撵,可以在 args 參數(shù)指定 Tag
-- 詳見上方【Tags 用法】
scan_dragto(x, y)
-- 詳見下方 scan_mark(x, y)
scan_mark(x, y)
-- 使用這種方式來實(shí)現(xiàn) Text 組件內(nèi)容的滾動(dòng)
-- 需要將鼠標(biāo)按鈕事件以及鼠標(biāo)當(dāng)前位置綁定到 scan_mark(x, y) 方法,然后將 <motion> 事件及當(dāng)前鼠標(biāo)位置綁定到 scan_dragto(x, y) 方法键闺,就可以實(shí)現(xiàn) Text 組件的內(nèi)容在當(dāng)前位置和 scan_mark(x, y) 指定的位置 (x, y) 之間滾動(dòng)
search(pattern, index, stopindex=None, forwards=None, backwards=None, exact=None, regexp=None, nocase=None, count=None)
-- 從 index 開始搜索 pattern寿烟,到 stopindex 結(jié)束(不指定表示搜索到末尾)
-- 如果成功找到,以 "line.column" 返回第一個(gè)匹配的字符辛燥;否則返回空字符串
-- forwards 參數(shù)設(shè)置為 True 表示向前(->)搜索
-- backwards 參數(shù)設(shè)置為 True 表示向后(<-)搜索
-- exact 參數(shù)設(shè)置為 True 表示搜索與 pattern 完全匹配的結(jié)果
-- regexp 參數(shù)設(shè)置為 True筛武,則 pattern 被解釋為 Tcl 格式的正則表達(dá)式
-- nocase 參數(shù)設(shè)置為 True 是忽略大小寫,默認(rèn)是區(qū)分大小寫的搜索
-- count 參數(shù)指定為一個(gè) IntVar 的 Tkinter 變量挎塌,用于存放當(dāng)找到匹配的字符個(gè)數(shù)(如果匹配結(jié)果中沒有嵌入的 image 或 window 對(duì)象的話徘六,一般該值等于 pattern 的字符個(gè)數(shù))
see(index)
-- 滾動(dòng)內(nèi)容,確保 index 指定的位置可見
tag_add(tagName, index1, index2=None)
-- 為 index1 到 index2 之間的內(nèi)容添加一個(gè) Tag(tagName 參數(shù)指定)
-- 如果 index2 參數(shù)忽略榴都,則單獨(dú)為 index1 指定的內(nèi)容添加 Tag
-- 詳見上方【Tags 用法】
tag_bind(tagName, sequence, func, add=None)
-- 為 Tag 綁定事件
-- 詳見上方【Tags 用法】
tag_cget(tagName, option)
-- 返回 tagName 指定的 option 選項(xiàng)的值
tag_config(tagName, cnf=None, **kw)
-- 跟 tag_configure(tagName, cnf=None, **kw) 一樣
tag_configure(tagName, cnf=None, **kw)
-- 設(shè)置 tagName 的選項(xiàng)
-- 詳見上方【Tags 用法】
tag_delete(*tagNames)
-- 刪除 tagNames 指定的 Tags
tag_lower(tagName, belowThis=None)
-- 降低 Tag 的優(yōu)先級(jí)
-- 如果 belowThis 參數(shù)不為空待锈,則表示 tagName 需要比 belowThis 指定的 Tag 優(yōu)先級(jí)更低
-- 詳見上方【Tags 用法】
tag_names(index=None)
-- 如果不帶參數(shù),表示返回 Text 組件中所有 Tags 的名字
-- index 參數(shù)表示返回該位置上所有的 Tags 的名字
tag_nextrange(tagName, index1, index2=None)
-- 在 index1 到 index2 的范圍內(nèi)第一個(gè) tagName 的位置
-- 如果沒有則返回空字符串
tag_prevrange(tagName, index1, index2=None)
-- tag_nextrange() 的反向查找嘴高,也就是查找范圍是 index2 到 index1
tag_raise(tagName, aboveThis=None)
-- 提高 Tag 的優(yōu)先級(jí)
-- 如果 aboveThis 參數(shù)不為空炉擅,則表示 tagName 需要比 aboveThis 指定的 Tag 優(yōu)先級(jí)更高
-- 詳見上方【Tags 用法】
tag_ranges(tagName)
-- 返回所有 tagName 指定的文本辉懒,并將它們的范圍以列表的形式返回
tag_remove(tagName, index1, index2=None)
-- 刪除 index1 到 index2 之間所有的 tagName
-- 如果忽略 index2 參數(shù),那么只刪除 index1 指定的那個(gè)字符的 tagName(如果有的話)
tag_unbind(tagName, sequence, funcid=None)
-- 解除與 tagName 綁定的事件(sequence 指定)
window_cget(index, option)
-- 返回 index 參數(shù)指定的嵌入 window 對(duì)象的 option 選項(xiàng)的值
-- 如果給定的位置沒有嵌入 window 對(duì)象谍失,則拋出 TclError 異常
window_config(index, cnf=None, **kw)
-- 跟 window_configure(index, cnf=None, **kw) 一樣
window_configure(index, cnf=None, **kw)
-- 修改 index 參數(shù)指定的嵌入 window 對(duì)象的一個(gè)或多個(gè) option 選項(xiàng)的值
-- 如果給定的位置沒有嵌入 window 對(duì)象眶俩,則拋出 TclError 異常
window_create(index, **options)
-- 在 index 參數(shù)指定的位置嵌入一個(gè) window 對(duì)象
-- 支持兩種方式在 Text 組件中嵌入 window 對(duì)象:請(qǐng)看下方 create 選項(xiàng)和 window 選項(xiàng)的描述
-- 可選選項(xiàng) align:設(shè)定此圖像的垂直對(duì)齊,可以是 "top"快鱼、"center"颠印、"bottom" 或 "baseline"
-- 可選選項(xiàng) create:指定一個(gè)回調(diào)函數(shù)用于創(chuàng)建嵌入的 window 組件,該函數(shù)沒有參數(shù)抹竹,并且必須創(chuàng)建 Text 的子組件并返回
-- 可選選項(xiàng) padx:設(shè)置水平方向上的額外間距
-- 可選選項(xiàng) pady:設(shè)置垂直方向上的額外間距
-- 可選選項(xiàng) stretch:該選項(xiàng)控制當(dāng)行的高度大于嵌入組件的高度時(shí)线罕,嵌入組件是否延伸。默認(rèn)值是 False窃判,表示組件保持原形钞楼;設(shè)置為 True 表示將該組件垂直部分延伸至行的高度
-- 可選選項(xiàng) window:指定一個(gè)已經(jīng)創(chuàng)建好的 window 組件,該組件必須是 Text 組件的子組件
window_names()
-- 返回 Text 組件中嵌入的所有 window 對(duì)象的名字
xview(*args)
-- 該方法用于在水平方向上滾動(dòng) Text 組件的內(nèi)容袄琳,一般通過綁定 Scollbar 組件的 command 選項(xiàng)來實(shí)現(xiàn)(具體操作參考:Scrollbar)
-- 如果第一個(gè)參數(shù)是 "moveto"询件,則第二個(gè)參數(shù)表示滾動(dòng)到指定的位置:0.0 表示最左端,1.0 表示最右端
-- 如果第一個(gè)參數(shù)是 "scroll"唆樊,則第二個(gè)參數(shù)表示滾動(dòng)的數(shù)量宛琅,第三個(gè)參數(shù)表示滾動(dòng)的單位(可以是 "units" 或 "pages"),例如:xview("scroll", 3, "units") 表示向右滾動(dòng)三行
xview_moveto(fraction)
-- 跟 xview("moveto", fraction) 一樣
xview_scroll(number, what)
-- 跟 xview("scroll", number, what) 一樣
yview(*args)
-- 該方法用于在垂直方向上滾動(dòng) Text 組件的內(nèi)容逗旁,一般通過綁定 Scollbar 組件的 command 選項(xiàng)來實(shí)現(xiàn)(具體操作參考:Scrollbar)
-- 如果第一個(gè)參數(shù)是 "moveto"嘿辟,則第二個(gè)參數(shù)表示滾動(dòng)到指定的位置:0.0 表示最頂端,1.0 表示最底端
-- 如果第一個(gè)參數(shù)是 "scroll"片效,則第二個(gè)參數(shù)表示滾動(dòng)的數(shù)量红伦,第三個(gè)參數(shù)表示滾動(dòng)的單位(可以是 "units" 或 "pages"),例如:yview("scroll", 3, "pages") 表示向下滾動(dòng)三頁
yview_moveto(fraction)
-- 跟 yview("moveto", fraction) 一樣
yview_scroll(number, what)
-- 跟 yview("scroll", number, what) 一樣