Text(文本)組件用于顯示和處理多行文本。在 Tkinter 的所有組件中,Text 組件顯得異常強大和靈活,適用于多種任務(wù)。雖然該組件的主要目的是顯示多行文本,但它常常也被用于作為簡單的文本編輯器和網(wǎng)頁瀏覽器使用。
何時使用 Text 組件?
Text 組件用于顯示文本文檔,包含純文本或格式化文本(使用不同字體,嵌入圖片,顯示鏈接,甚至是帶 CSS 格式的 HTML 等)。因此,它常常也被用于作為簡單的文本編輯器和網(wǎng)頁瀏覽器使用。
用法
當你創(chuàng)建一個 Text 組件的時候,它里邊是沒有內(nèi)容的。為了給其插入內(nèi)容,你可以使用 insert() 方法以及 "insert" 或 "end" 索引號:
text.insert("insert", "I love ") text.insert("end", "Python.com!")
值得一提的是,Text 組件的 insert() 方法有一個可選的參數(shù),用于指定一個或多個“標簽”(標簽用于設(shè)置文本的格式,請參考下方【Tags 用法】)到新插入的文本中:
text = tk.Text(root, width=20, height=5) text.tag_config("tag_1", backgroun="yellow", foreground="red") text.insert("insert", "I love ") text.insert("end", "FishC.com!", "tag_1")
在 Text 組件中插入對象,可以使用 window_create() 和 image_create() 方法:
text = tk.Text(root, width=20, height=5) text.insert("insert", "I love Python!") b1 = tk.Button(text, text="點我點我", command=show) text.window_create("insert", window=b1)
刪除 Text 組件中的內(nèi)容可以用 delete() 方法,下邊代碼用于刪除所有內(nèi)容(也包含 window 和 image 對象,但不會刪除 marks 的內(nèi)容):
text.delete(1.0, "end")
刪除單獨一個字符(或者一個 window 對象,或者一個 image 對象),你可以僅使用一個參數(shù):
text.delete(b1)
將 state 選項從默認的 "normal" 修改為 "disabled",使得 Text 組件中的內(nèi)容為“只讀”形式。不過需要注意的是,當你需要進行任何修改的時候,記得將 state 選項改回 "normal",否則 insert() 和 delete() 方法都會失效。
獲得 Text 組件的內(nèi)容,可以使用 get() 方法(僅獲取文本內(nèi)容):
contents = text.get(1.0, "end")
在下邊例子中,通過校檢 Text 組件中文本的 MD5 摘要來判斷內(nèi)容是否發(fā)生改變:
text = tk.Text(root, width=20, height=5) text.insert("insert", "I love Python.com!") contents = text.get(1.0, "end") m = hashlib.md5(contents.encode()) contents = text.get(1.0, "end") if sig != getSig(contents): print("警報:內(nèi)容發(fā)生變動!") tk.Button(root, text="檢查", command=check).pack()
index() 方法用于將所有支持的“索引”格式(請參考下方【Indexes 用法】)轉(zhuǎn)換為“行.列”格式的索引號:
text = tk.Text(root, width=20, height=5) print(text.index("insert")) text.insert("insert", "You are good!") print(text.index("insert"))
如果你需要跟蹤一個位置,那么你可以將該位置“標記”下來(請參考下方【Marks 用法】):
text = tk.Text(root, width=20, height=5) text.insert("insert", "You are good!") text.mark_set("here", '1.8') text.insert("here", "very ")
最后,使用 search() 方法可以搜索 Text 組件中的內(nèi)容。你可以提供一個確切的目標進行搜索(默認),也可以使用 Tcl 格式的正則表達式進行搜索(需設(shè)置 regexp 選項為 True):
text = tk.Text(root, width=20, height=5) text.insert("insert", "I love Python.com!") # 將任何格式的索引號統(tǒng)一為元組 (行,列) 的格式輸出 def getIndex(text, index): return tuple(map(int, str.split(text.index(index), "."))) pos = text.search("o", start, stopindex="end") print("找到啦,位置是:", getIndex(text, pos)) start = pos + "+1c" # 將 start 指向下一個字符
如果忽略 stopindex 選項,表示直到文本的末尾結(jié)束搜索。設(shè)置 backwards 選項為 True,則是修改搜索的方向(變?yōu)橄蚝笏阉鳎敲?start 變量你應(yīng)該設(shè)置為 END,stopindex 選項設(shè)置為 1.0,最后 "+1c" 改為 "-1c")
“恢復”和“撤銷”操作
Text 組件還支持“恢復”和“撤銷”操作,這使得 Text 組件顯得相當高大上。
通過設(shè)置 undo 選項為 True 可以開啟 Text 組件的“撤銷”功能。然后用 edit_undo() 方法實現(xiàn)“撤銷”操作,用 edit_redo() 方法實現(xiàn)“恢復”操作。
這是因為 Text 組件內(nèi)部有一個棧專門用于記錄內(nèi)容的每次變動,所以每次“撤銷”操作就是一次彈棧操作,“恢復”就是再次壓棧。
text = tk.Text(root, width=40, height=5, undo = True) tk.Button(root, text = "撤銷", command = move).pack()
大概就是下圖這么回事
默認情況下,每一次完整的操作將會放入棧中。但怎么樣算是一次完整的操作呢?Tkinter 覺得每次焦點切換、用戶按下 Enter 鍵、刪除\插入操作的轉(zhuǎn)換等之前的操作算是一次完整的操作。也就是說你連續(xù)輸入“I love PythonP”的話,一次的“撤銷”操作就會將所有的內(nèi)容刪除。
那我們能不能自定義呢?比如我希望插入一個字符就算一次完整的操作,然后每次點擊“撤銷”就去掉一個字符。
當然可以!做法就是先將 autoseparators 選項設(shè)置為 False(因為這個選項是讓 Tkinter 在認為一次完整的操作結(jié)束后自動插入“分隔符”),然后綁定鍵盤事件,每次有輸入就用 edit_separator() 方法人為地插入一個“分隔符”:
text = tk.Text(root, width=40, height=5, autoseparators=False, undo=True, maxundo=10) text.bind('<Key>', callback) text.insert("insert", "I love Python!") tk.Button(root, text = "撤銷", command = move).pack()
Indexes 用法
Indexes(索引)是用來指向 Text 組件中文本的位置,跟 Python 的序列索引一樣,Text 組件索引也是對應(yīng)實際字符之間的位置。
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"
行/列 是最基礎(chǔ)的索引方式,它們將索引位置的行號和列號以字符串的形式表示出來(中間以 "." 分隔,例如 "1.0")。需要注意的是,行號以 1 開始,列號則以 0 開始。你還可以使用以下語法構(gòu)建索引:
"%d.%d" % (line, column)
指定超出現(xiàn)有文本的最后一行的行號,或超出一行中列數(shù)的列號都不會引發(fā)錯誤。對于這樣的指定,Tkinter 解釋為已有內(nèi)容的末尾的下一個位置。
需要注意的是,使用 行/列 的索引方式看起來像是浮點值。其實不只像而已,你在需要指定索引的時候使用浮點值代替也是可以的:
text = tk.Text(root, width = 30, heigh = 3) text.insert("insert", "I love Python") print(text.get("1.2", 1.6))
使用 index() 方法可以將所有支持的“索引”格式轉(zhuǎn)換為“行/列”格式的索引號。
"line.end"
行號加上字符串 ".end" 的格式表示為該行最后一個字符的位置:
text.insert("insert", "I love Python") print(text.get("1.2", "1.end"))
"insert"
對應(yīng)插入光標的位置。
"current"
對應(yīng)與鼠標坐標最接近的位置。不過,如果你緊按鼠標任何一個按鈕,它會直到你松開它才響應(yīng)。
"end"
對應(yīng) Text 組件的文本緩沖區(qū)最后一個字符的下一個位置。
user-defined marks
user-defined marks 是對 Text 組件中位置的命名。"insert" 和 "current" 是兩個預先命名好的 marks,除此之外你可以自定義 marks(請參考下方【Marks 用法】)。
User-defined tags
User-defined tags 代表可以分配給 Text 組件的特殊事件綁定和風格(請參考下方【Tags 用法】)。
你可以使用 "tag.first"(使用 tag 的文本的第一個字符之前)和 "tag.last"(使用 tag 的文本的最后一個字符之后)語法表示標簽的范圍。
如果查無此 tag,那么 Tkinter 會拋出一個TclError 異常。
selection(SEL_FIRST,SEL_LAST)
selection 是一個名為 SEL(或 "sel")的特殊 tag,表示當前被選中的范圍,你可以使用 SEL_FIRST 到 SEL_LAST 來表示這個范圍。如果沒有選中的內(nèi)容,那么 Tkinter 會拋出一個TclError 異常。
window coordinate("@x,y")
你還可以使用窗口坐標作為索引。例如在一個事件綁定中,你可以使用以下代碼找到最接近鼠標位置的字符:
"@%d,%d" % (event.x, event.y)
embedded object name(window,images)
embedded object name 用于指向在 Text 組件中嵌入的 window 和 image 對象。要引用一個 window,只要簡單地將一個 Tkinter 組件實例作為索引即可。引用一個嵌入的 image,只需使用相應(yīng)的 PhotoImage 和 BitmapImage 對象。
expressions
expressions 用于修改任何格式的索引,用字符串的形式實現(xiàn)修改索引的表達式。
具體表達式實現(xiàn)如下:
表達式 | 含義 | "+ count chars" | 1. 將索引向前(->)移動 count 個字符 2. 可以越過換行符,但不能超過 END 的位置 | "- count chars" | 1. 將索引向后(<-)移動 count 個字符 2. 可以越過換行符,但不能超過 "1.0" 的位置 | "+ count lines" | 1. 將索引向前(->)移動 count 行 2. 索引會盡量保持與移動前在同一列上,但如果移動后的那一行字符太少,將移動到該行的末尾 | "- count lines" | 1. 將索引向后(<-)移動 count 行 2. 索引會盡量保持與移動前在同一列上,但如果移動后的那一行字符太少,將移動到該行的末尾 | " linestart" | 1. 將索引移動到當前索引所在行的起始位置 2. 注意,使用該表達式前邊必須有一個空格隔開 | " lineend" | 1. 將索引移動到當前索引所在行的末尾 2. 注意,使用該表達式前邊必須有一個空格隔開 | " wordstart" | 1. 將索引移動到當前索引指向的單詞的開頭 2. 單詞的定義是一系列字母、數(shù)字、下劃線或任何非空白字符的組合 3. 注意,使用該表達式前邊必須有一個空格隔開 | " wordend" | 1. 將索引移動到當前索引指向的單詞的末尾 2. 單詞的定義是一系列字母、數(shù)字、下劃線或任何非空白字符的組合 3. 注意,使用該表達式前邊必須有一個空格隔開 |
TIPS:只要結(jié)果不產(chǎn)生歧義,關(guān)鍵字可以被縮寫,空格也可以省略。例如:"+ 5 chars" 可以簡寫成 "+5c"
在實現(xiàn)中,為了確保表達式為普通字符串,你可以使用 str 或格式化操作來創(chuàng)建一個表達式字符串。下邊例子演示了如何刪除插入光標前邊的一個字符:
event.widget.delete("%s-1c" %"insert" , "insert")
Marks 用法
Marks(標記)通常是嵌入到 Text 組件文本中的不可見對象。事實上 Marks 是指定字符間的位置,并跟隨相應(yīng)的字符一起移動。Marks 有 "insert","current" 和 user-defined marks(用戶自定義的 Marks)。其中,"insert" 和 "current" 是 Tkinter 預定義的特殊 Marks,它們不能夠被刪除。
"insert" 用于指定當前插入光標的位置,Tkinter 會在該位置繪制一個閃爍的光標(因此并不是所有的 Marks 都不可見)。
"current" 用于指定與鼠標坐標最接近的位置。不過,如果你緊按鼠標任何一個按鈕,它會直到你松開它才響應(yīng)。
你還可以自定義任意數(shù)量的 Marks,Marks 的名字是由普通字符串組成,可以是除了空白字符外的任何字符(為了避免歧義,你應(yīng)該起一個有意義的名字)。使用 mark_set() 方法創(chuàng)建和移動 Marks。
如果你在一個 Mark 標記的位置之前插入或刪除文本,那么 Mark 跟著一并移動。刪除 Marks 你需要使用 mark_unset() 方法,刪除 Mark 周圍的文本并不會刪除 Mark 本身。
如果有做相關(guān)練習的,應(yīng)該會被 Mark 的很多特性所疑惑,在準備這個內(nèi)容的時候也很是迷惑,找了不知多少文檔......最后總結(jié)為下邊幾個例子講解:
例1,Mark 事實上就是索引,用于表示位置:
text = tk.Text(root, width = 30, heigh = 3) text.insert("insert", "I love Python") text.mark_set("here", "1.2")
例2,如果 Mark 前邊的內(nèi)容發(fā)生改變,那么 Mark 的位置也會跟著移動(說白了就是 Mark 會“記住”它后邊的那貨~):
text.insert("insert", "I love Python") text.mark_set("here", "1.2")
例3,如果 Mark 周圍的文本被刪除了,Mark 仍然還在噢(只是它后邊的那貨被刪除了,所以它六神無主,只能初始化為 "1.0"):
text.insert("insert", "I love Python") text.mark_set("here", "1.2") text.delete("1.0", "end")
例4,只有 mark_unset() 方法可以解除 Mark 的封?。?/p>
text.insert("insert", "I love Python") text.mark_set("here", "1.2") text.delete("1.0", "end")
看,其實也沒有那么難嘛~
好,講最后一點,我們看到了,默認插入內(nèi)容到 Mark,是插入到它的左側(cè)(就是說插入一個字符的話,Mark 向后移動了一個字符的位置)。那能不能插入到 Mark 的右側(cè)呢?其實是可以的,通過 mark_gravity() 方法就可以實現(xiàn)。
例5(對比例2):
text.insert("insert", "I love Python") text.mark_set("here", "1.2") text.mark_gravity("here", "left") #默認是 "right"
Tags 用法
Tags(標簽)通常用于改變 Text 組件中內(nèi)容的樣式和功能。你可以修改文本的字體、尺寸和顏色。另外,Tags 還允許你將文本、嵌入的組件和圖片與鍵盤和鼠標等事件相關(guān)聯(lián)。除了 user-defined tags(用戶自定義的 Tags),還有一個預定義的特殊 Tag:SEL。
SEL(或 "sel")用于表示對應(yīng)的選中內(nèi)容(如果有的話)。
你可以自定義任意數(shù)量的 Tags,Tags 的名字是由普通字符串組成,可以是除了空白字符外的任何字符。另外,任何文本內(nèi)容都支持多個 Tags 描述,任何 Tag 也可以用于描述多個不同的文本內(nèi)容。
為指定文本添加 Tags 可以使用 tag_add() 方法:
text = tk.Text(root, width=40, height=5) text.insert("insert", "I love Python.com!") text.tag_add("tag1", "1.7", "1.13", "1.15") text.tag_config("tag1", background="yellow", foreground="red")
如上,使用 tag_config() 方法可以設(shè)置 Tags 的樣式。下邊羅列了 tag_congif() 方法可以使用的選項:
選項 | 含義 | background | 1. 指定該 Tag 所描述的內(nèi)容的背景顏色 2. 注意:bg 并不是該選項的縮寫,在這里 bg 被解釋為 bgstipple 選項的縮寫 | bgstipple | 1. 指定一個位圖作為背景,并使用 background 選項指定的顏色填充 2. 只有設(shè)置了 background 選項該選項才會生效 3. 默認的標準位圖有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question' 和 'warning' | borderwidth | 1. 指定文本框的寬度 2. 默認值是 0 3. 只有設(shè)置了 relief 選項該選項才會生效 4. 注意:該選項不能使用 bd 縮寫 | fgstipple | 1. 指定一個位圖作為前景色 2. 默認的標準位圖有:'error', 'gray75', 'gray50', 'gray25', 'gray12', 'hourglass', 'info', 'questhead', 'question' 和 'warning' | font | 指定該 Tag 所描述的內(nèi)容使用的字體 | foreground | 1. 指定該 Tag 所描述的內(nèi)容的前景色 2. 注意:fg 并不是該選項的縮寫,在這里 fg 被解釋為 fgstipple 選項的縮寫 | justify | 1. 控制文本的對齊方式 2. 默認是 "left"(左對齊),還可以選擇 "right"(右對齊)和 "center"(居中) 3. 注意:需要將 Tag 指向該行的第一個字符,該選項才能生效 | lmargin1 | 1. 設(shè)置 Tag 指向的文本塊第一行的縮進 2. 默認值是 0 3. 注意:需要將 Tag 指向該文本塊的第一個字符或整個文本塊,該選項才能生效 | lmargin2 | 1. 設(shè)置 Tag 指向的文本塊除了第一行其他行的縮進 2. 默認值是 0 3. 注意:需要將 Tag 指向整個文本塊,該選項才能生效 | offset | 1. 設(shè)置 Tag 指向的文本相對于基線的偏移距離 2. 可以控制文本相對于基線是升高(正數(shù)值)或者降低(負數(shù)值) 3. 默認值是 0 | overstrike | 1. 在 Tag 指定的文本范圍畫一條刪除線 2. 默認值是 False | relief | 1. 指定 Tag 對應(yīng)范圍的文本的邊框樣式 2. 可以使用的值有:"sunken", "raised", "groove", "rifge" 或 "flat" 3. 默認值是 "flat"(沒有邊框) | rmargin | 1. 設(shè)置 Tag 指向的文本塊右側(cè)的縮進 2. 默認值是 0 | spacing1 | 1. 設(shè)置 Tag 所描述的文本塊中每一行與上方的空白間隔 2. 注意:自動換行不算 3. 默認值是 0 | spacing2 | 1. 設(shè)置 Tag 所描述的文本塊中自動換行的各行間的空白間隔 2. 注意:換行符('\n')不算 3. 默認值是 0 | spacing3 | 1. 設(shè)置 Tag 所描述的文本塊中每一行與下方的空白間隔 2. 注意:自動換行不算 3. 默認值是 0 | tabs | 1. 定制 Tag 所描述的文本塊中 Tab 按鍵的功能 2. 默認 Tab 被定義為 8 個字符的寬度 3. 你還可以定義多個制表位:tabs=('3c', '5c', '12c') 表示前 3 個 Tab 寬度分別為 3厘米,5厘米,12厘米,接著的 Tab 按照最后兩個的差值計算,即:19厘米,26厘米,33厘米 4. 你應(yīng)該注意到了,它上邊 'c' 的含義是“厘米”而不是“字符”,還可以選擇的單位有 'i'(英寸),'m'(毫米)和 'p'(DPI,大約是 '1i' 等于 '72p') 5. 如果是一個整型值,則單位是像素 | underline | 1. 該選項設(shè)置為 True 的話,則 Tag 所描述的范圍內(nèi)文本將被畫上下劃線 2. 默認值是 False | wrap | 1. 設(shè)置當一行文本的長度超過 width 選項設(shè)置的寬度時,是否自動換行 2. 該選項的值可以是:"none"(不自動換行),"char"(默認)(按字符自動換行)和 "word"(按單詞自動換行) |
如果你對同一個范圍內(nèi)的文本加上多個 Tags,并且設(shè)置相同的選項,那么新創(chuàng)建的 Tag 樣式會覆蓋比較舊的 Tag:
text = tk.Text(root, width=40, height=5) text.tag_add("tag1", "1.7", "1.13", "1.15") text.tag_config("tag1", background="yellow", foreground="red") # 舊的 Tag text.tag_config("tag2", foreground="blue") # 新的 Tag # 那么新創(chuàng)建的 Tag2 會覆蓋比較舊的 Tag1 的相同選項 # 注意,與下邊的調(diào)用順序沒有關(guān)系 text.insert("insert", "I love Python.com!", ("tag2", "tag1"))
你或許想控制 Tags 間的優(yōu)先級,這可以實現(xiàn)嗎?完全沒有問題!你可以使用 tag_raise() 和 tag_lower() 方法來提高和降低某個 Tag 的優(yōu)先級。
text = tk.Text(root, width=40, height=5) text.tag_config("tag1", background="yellow", foreground="red") text.tag_config("tag2", foreground="green") text.insert("insert", "I love Python!", ("tag2", "tag1"))
另外 Tags 還支持事件綁定,使用的是 tag_bind() 的方法。
下邊例子中我們將文本("Python.com")與鼠標事件進行綁定,當鼠標進入該文本段的時候,鼠標樣式切換為 "arrow" 形態(tài),離開文本段的時候切換回 "xterm" 形態(tài)。當觸發(fā)鼠標“左鍵點擊操作”事件的時候,使用默認瀏覽器打開Python的首頁(https://www./):
text = tk.Text(root, width=40, height=5) text.insert("insert", "I love Python.com!") text.tag_add("link", "1.7", "1.17") text.tag_config("link", foreground = "blue", underline = True) def show_arrow_cursor(event): text.config(cursor = "arrow") def show_xterm_cursor(event): text.config(cursor = "xterm") webbrowser.open("https://www./") text.tag_bind("link", "<Enter>", show_arrow_cursor) text.tag_bind("link", "<Leave>", show_xterm_cursor) text.tag_bind("link", "<Button-1>", click)
參數(shù)
Text(master=None, **options) (class)
master -- 父組件
**options -- 組件選項,下方表格詳細列舉了各個選項的具體含義和用法:
選項 | 含義 | autoseparators | 1. 指定實現(xiàn)“撤銷”操作的時候是否自動插入一個“分隔符”(用于分隔操作記錄) 2. 默認值是 True 3. 詳見上方用法【“撤銷”和“恢復”操作】 | background | 1. 設(shè)置 Text 組件的背景顏色 2. 注意:通過使用 Tags 可以使 Text 組件中的文本支持多種背景顏色顯示(請參考上方【Tags 用法】) | bg | 跟 background 一樣 | borderwidth | 1. 設(shè)置 Entry 的邊框?qū)挾?br> 2. 默認值是 1 像素 | bd | 跟 borderwidth 一樣 | cursor | 1. 指定當鼠標在 Text 組件上飄過的時候的鼠標樣式 2. 默認值由系統(tǒng)指定 | exportselection | 1. 指定選中的文本是否可以被復制到剪貼板 2. 默認值是 True 3. 可以修改為 False 表示不允許復制文本 | font | 1. 設(shè)置 Text 組件中文本的默認字體 2. 注意:通過使用 Tags 可以使 Text 組件中的文本支持多種字體顯示(請參考上方【Tags 用法】) | foreground | 1. 設(shè)置 Text 組件中文本的顏色 2. 注意:通過使用 Tags 可以使 Text 組件中的文本支持多種顏色顯示(請參考上方【Tags 用法】) | fg | 跟 foreground 一樣 | height | 1. 設(shè)置 Text 組件的高度 2. 注意:單位是行數(shù),不是像素噢 | highlightbackground | 1. 指定當 Text 組件沒有獲得焦點的時候高亮邊框的顏色 2. 默認值由系統(tǒng)指定 | highlightcolor | 1. 指定當 Text 組件獲得焦點的時候高亮邊框的顏色 2. 默認值由系統(tǒng)指定 | highlightthickness | 1. 指定高亮邊框的寬度 2. 默認值是 0 | insertbackground | 1. 設(shè)置插入光標的顏色 2. 默認是 BLACK(或 "black") | insertborderwidth | 1. 設(shè)置插入光標的邊框?qū)挾?br> 2. 默認值是 0 3. 提示:你得設(shè)置 insertwidth 選項為比較大的數(shù)值才能看出來噢 | insertofftime | 1. 該選項控制光標的閃爍頻率(滅) 2. 單位是毫秒 | insertontime | 1. 該選項控制光標的閃爍頻率(亮) 2. 單位是毫秒 | insertwidth | 1. 指定光標的寬度 2. 默認值是 2 像素 | maxundo | 1. 設(shè)置允許“撤銷”操作的最大次數(shù) 2. 默認值是 0 3. 設(shè)置為 -1 表示不限制 | padx | 1. 指定水平方向上的額外間距(內(nèi)容和邊框間) 2. 默認值是 1 | pady | 1. 指定垂直方向上的額外間距(內(nèi)容和邊框間) 2. 默認值是 1 | relief | 1. 指定邊框樣式 2. 默認值是 "sunken" 3. 其他可以選擇的值是 "flat","raised","groove" 和 "ridge" | selectbackground | 1. 指定被選中文本的背景顏色 2. 默認值由系統(tǒng)指定 | selectborderwidth | 1. 指定被選中文本的邊框?qū)挾?br> 2. 默認值是 0 | selectforeground | 1. 指定被選中文本的字體顏色 2. 默認值由系統(tǒng)指定 | setgrid | 1. 指定一個布爾類型的值,確定是否啟用網(wǎng)格控制 2. 默認值是 False | spacing1 | 1. 指定 Text 組件的文本塊中每一行與上方的空白間隔 2. 注意:自動換行不算 3. 默認值是 0 | spacing2 | 1. 指定 Text 組件的文本塊中自動換行的各行間的空白間隔 2. 注意:換行符('\n')不算 3. 默認值是 0 | spacing3 | 1. 指定 Text 組件的文本中每一行與下方的空白間隔 2. 注意:自動換行不算 3. 默認值是 0 | state | 1. 默認情況下 Text 組件響應(yīng)鍵盤和鼠標事件("normal") 2. 如果將該選項的值設(shè)置為 "disabled",那么上述響應(yīng)就不會發(fā)生,并且你無法修改里邊的內(nèi)容 | tabs | 1. 定制 Tag 所描述的文本塊中 Tab 按鍵的功能 2. 默認 Tab 被定義為 8 個字符的寬度 3. 你還可以定義多個制表位:tabs=('3c', '5c', '12c') 表示前 3 個 Tab 寬度分別為 3厘米,5厘米,12厘米,接著的 Tab 按照最后兩個的差值計算,即:19厘米,26厘米,33厘米 4. 你應(yīng)該注意到了,它上邊 'c' 的含義是“厘米”而不是“字符”,還可以選擇的單位有 'i'(英寸),'m'(毫米)和 'p'(DPI,大約是 '1i' 等于 '72p') 5. 如果是一個整型值,則單位是像素 | takefocus | 1. 指定使用 Tab 鍵可以將焦點移動到 Text 組件中 2. 默認是開啟的,可以將該選項設(shè)置為 False 避免焦點在此 Text 組件中 | undo | 1. 該選項設(shè)置為 True 開啟“撤銷”功能 2. 該選項設(shè)置為 False 關(guān)閉“撤銷”功能 3. 默認值是 False | width | 1. 設(shè)置 Text 組件的寬度 2. 注意:單位是字符數(shù),因此 Text 組件的實際寬度還取決于字體的大小 | wrap | 1. 設(shè)置當一行文本的長度超過 width 選項設(shè)置的寬度時,是否自動換行 2. 該選項的值可以是:"none"(不自動換行),"char"(按字符自動換行)和 "word"(按單詞自動換行) | xscrollcommand | 1. 與 scrollbar(滾動條)組件相關(guān)聯(lián)(水平方向) 2. 使用方法可以參考:Scrollbar 組件 | yscrollcommand | 1. 與 scrollbar(滾動條)組件相關(guān)聯(lián)(垂直方向) 2. 使用方法可以參考:Scrollbar 組件 |
方法
bbox(index) -- 返回給定索引指定的字符的邊界框 -- 返回值是一個 4 元組:(x, y, width, height) -- 如果該字符是不可見的,那么返回 None -- 注意:只有當 Text 組件被更新的時候該方法才有效,可以使用 update_idletasks() 方法先更新 Text 組件
compare(index1, op, index2) -- 返回對比 index1 和 index2 指定的兩個字符的結(jié)果 -- op 是操作符:'<', '<=', '==', '>=', '>' 或 '!='(不支持 Python 的 '<>' 操作符) -- 返回布爾類型的值表示對比的結(jié)果
debug(boolean=None) -- 開啟或關(guān)閉 Debug 狀態(tài)
delete(start, end=None) -- 刪除給定范圍的文本或嵌入對象 -- 如果在給定范圍內(nèi)有任何 Marks 標記的位置,則將 Marks 移動到 start 參數(shù)開始的位置
dlineinfo(index) -- 返回給定索引指定的字符所在行的邊界框 -- 返回值是一個 5 元組:(x, y, width, height, offset),offset 表示從該行的頂端到基線的偏移 -- 如果該行不可見,則返回 None -- 注意:只有當 Text 組件被更新的時候該方法才有效,可以使用 update_idletasks() 方法先更新 Text 組件
dump(index1, index2=None, command=None, **kw) -- 返回 index1 和 index2 之間的內(nèi)容 -- 返回的值是一個由 3 元組(關(guān)鍵詞,值,索引)組成的列表,關(guān)鍵詞參數(shù)的順序為:all, image, mark, tag, text, window -- 默認關(guān)鍵詞是 'all',表示全部關(guān)鍵詞均為選中狀態(tài) -- 如果需要篩選個別關(guān)鍵詞,可以用 dump(index1, index2, image=True, text=True) 這樣的形式調(diào)用 -- 如果指定了 command 函數(shù),那么會為列表中的每一個三元組作為參數(shù)調(diào)用一次該函數(shù)(這種情況下,dump() 不返回值)
edit_modified(arg=None) -- 該方法用于查詢和設(shè)置 modified 標志(該標標志用于追蹤 Text 組件的內(nèi)容是否發(fā)生變化) -- 如果不指定 arg 參數(shù),那么返回 modified 標志是否被設(shè)置 -- 你可以傳遞顯式地使用 True 或 False 作為參數(shù)來設(shè)置或清除 modified 標志 -- 任何代碼或用戶的插入或刪除文本操作,“撤銷”或“恢復”操作,都會是的 modified 標志被設(shè)置
edit_redo(self) -- “恢復”上一次的“撤銷”操作 -- 如果 undo 選項為 False,該方法無效 -- 詳見上方用法【“撤銷”和“恢復”操作】
edit_reset() -- 清空存放操作記錄的棧
edit_separator() -- 插入一個“分隔符”到存放操作記錄的棧中,用于表示已經(jīng)完成一次完整的操作 -- 如果 undo 選項為 False,該方法無效 -- 詳見上方用法【“撤銷”和“恢復”操作】
edit_undo() -- 撤銷最近一次操作 -- 如果 undo 選項為 False,該方法無效 -- 詳見上方用法【“撤銷”和“恢復”操作】
get(index1, index2=None) -- 返回 index1 到 index2(不包含)之間的文本 -- 如果 index2 參數(shù)忽略,則返回一個字符 -- 如果包含 image 和 window 的嵌入對象,均被忽略 -- 如果包含有多行文本,那么自動插入換行符('\n')
image_cget(index, option) -- 返回 index 參數(shù)指定的嵌入 image 對象的 option 選項的值 -- 如果給定的位置沒有嵌入 image 對象,則拋出 TclError 異常
image_configure(index, **options) -- 修改 index 參數(shù)指定的嵌入 image 對象的一個或多個 option 選項的值 -- 如果給定的位置沒有嵌入 image 對象,則拋出 TclError 異常
image_create(index, cnf={}, **kw) -- 在 index 參數(shù)指定的位置嵌入一個 image 對象 -- 該 image 對象必須是 Tkinter 的 PhotoImage 或 BitmapImage 實例 -- 可選選項 align:設(shè)定此圖像的垂直對齊,可以是 "top"、"center"、"bottom" 或 "baseline" -- 可選選項 image:PhotoImage 或 BitmapImage 對象 -- 可選選項 name:你可以為該圖像實例命名,如果你忽略此選項,那么 Tkinter 會自動為其取一個獨一無二的名字。 -- 可選選項 padx:設(shè)置水平方向上的額外間距 -- 可選選項 pady:設(shè)置垂直方向上的額外間距
image_names() -- 返回 Text 組件中嵌入的所有 image 對象的名字
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"(默認是 "right",即如果在 Mark 處插入文本的話,Mark 將發(fā)生相應(yīng)的移動以保持在插入文本的右側(cè)) -- 如果設(shè)置為 "left",那么在 Mark 處插入文本并不會移動 Mark(因為 Mark 在插入文本的左側(cè)) -- 如果忽略 direction 參數(shù),則返回指定 Mark 的方向 -- 詳見上方【Marks 用法】
mark_names() -- 返回 Text 組件中所有 Marks 的名字 -- 包括兩個特殊 Mark:"insert" 和 "current" -- 注意:"end" 是特殊的索引,不是 Mark
mark_next(index) -- 返回在 index 指定的位置后邊的一個 Mark 的名字 -- 如果不存在則返回空字符串
mark_previous(index) -- 返回在 index 指定的位置前邊的一個 Mark 的名字 -- 如果不存在則返回空字符串
mark_set(markName, index) -- 移動 Mark 到 index 參數(shù)指定的位置 -- 如果 markName 參數(shù)指定的 Mark 不存在,則創(chuàng)建一個新的 Mark
mark_unset(*markNames) -- 刪除 markNames 指定的 Marks -- 不能刪除預定義的 "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) -- 使用這種方式來實現(xiàn) Text 組件內(nèi)容的滾動 -- 需要將鼠標按鈕事件以及鼠標當前位置綁定到 scan_mark(x, y) 方法,然后將 <motion> 事件及當前鼠標位置綁定到 scan_dragto(x, y) 方法,就可以實現(xiàn) Text 組件的內(nèi)容在當前位置和 scan_mark(x, y) 指定的位置 (x, y) 之間滾動
search(pattern, index, stopindex=None, forwards=None, backwards=None, exact=None, regexp=None, nocase=None, count=None) -- 從 index 開始搜索 pattern,到 stopindex 結(jié)束(不指定表示搜索到末尾) -- 如果成功找到,以 "line.column" 返回第一個匹配的字符;否則返回空字符串 -- forwards 參數(shù)設(shè)置為 True 表示向前(->)搜索 -- backwards 參數(shù)設(shè)置為 True 表示向后(<-)搜索 -- exact 參數(shù)設(shè)置為 True 表示搜索與 pattern 完全匹配的結(jié)果 -- regexp 參數(shù)設(shè)置為 True,則 pattern 被解釋為 Tcl 格式的正則表達式 -- nocase 參數(shù)設(shè)置為 True 是忽略大小寫,默認是區(qū)分大小寫的搜索 -- count 參數(shù)指定為一個 IntVar 的 Tkinter 變量,用于存放當找到匹配的字符個數(shù)(如果匹配結(jié)果中沒有嵌入的 image 或 window 對象的話,一般該值等于 pattern 的字符個數(shù))
see(index) -- 滾動內(nèi)容,確保 index 指定的位置可見
tag_add(tagName, index1, index2=None) -- 為 index1 到 index2 之間的內(nèi)容添加一個 Tag(tagName 參數(shù)指定) -- 如果 index2 參數(shù)忽略,則單獨為 index1 指定的內(nèi)容添加 Tag -- 詳見上方【Tags 用法】
tag_bind(tagName, sequence, func, add=None) -- 為 Tag 綁定事件 -- 詳見上方【Tags 用法】
tag_cget(tagName, option) -- 返回 tagName 指定的 option 選項的值
tag_config(tagName, cnf=None, **kw) -- 跟 tag_configure(tagName, cnf=None, **kw) 一樣
tag_configure(tagName, cnf=None, **kw) -- 設(shè)置 tagName 的選項 -- 詳見上方【Tags 用法】
tag_delete(*tagNames) -- 刪除 tagNames 指定的 Tags
tag_lower(tagName, belowThis=None) -- 降低 Tag 的優(yōu)先級 -- 如果 belowThis 參數(shù)不為空,則表示 tagName 需要比 belowThis 指定的 Tag 優(yōu)先級更低 -- 詳見上方【Tags 用法】
tag_names(index=None) -- 如果不帶參數(shù),表示返回 Text 組件中所有 Tags 的名字 -- index 參數(shù)表示返回該位置上所有的 Tags 的名字
tag_nextrange(tagName, index1, index2=None) -- 在 index1 到 index2 的范圍內(nèi)第一個 tagName 的位置 -- 如果沒有則返回空字符串
tag_prevrange(tagName, index1, index2=None) -- tag_nextrange() 的反向查找,也就是查找范圍是 index2 到 index1
tag_raise(tagName, aboveThis=None) -- 提高 Tag 的優(yōu)先級 -- 如果 aboveThis 參數(shù)不為空,則表示 tagName 需要比 aboveThis 指定的 Tag 優(yōu)先級更高 -- 詳見上方【Tags 用法】
tag_ranges(tagName) -- 返回所有 tagName 指定的文本,并將它們的范圍以列表的形式返回
tag_remove(tagName, index1, index2=None) -- 刪除 index1 到 index2 之間所有的 tagName -- 如果忽略 index2 參數(shù),那么只刪除 index1 指定的那個字符的 tagName(如果有的話)
tag_unbind(tagName, sequence, funcid=None) -- 解除與 tagName 綁定的事件(sequence 指定)
window_cget(index, option) -- 返回 index 參數(shù)指定的嵌入 window 對象的 option 選項的值 -- 如果給定的位置沒有嵌入 window 對象,則拋出 TclError 異常
window_config(index, cnf=None, **kw) -- 跟 window_configure(index, cnf=None, **kw) 一樣
window_configure(index, cnf=None, **kw) -- 修改 index 參數(shù)指定的嵌入 window 對象的一個或多個 option 選項的值 -- 如果給定的位置沒有嵌入 window 對象,則拋出 TclError 異常
window_create(index, **options) -- 在 index 參數(shù)指定的位置嵌入一個 window 對象 -- 支持兩種方式在 Text 組件中嵌入 window 對象:請看下方 create 選項和 window 選項的描述 -- 可選選項 align:設(shè)定此圖像的垂直對齊,可以是 "top"、"center"、"bottom" 或 "baseline" -- 可選選項 create:指定一個回調(diào)函數(shù)用于創(chuàng)建嵌入的 window 組件,該函數(shù)沒有參數(shù),并且必須創(chuàng)建 Text 的子組件并返回 -- 可選選項 padx:設(shè)置水平方向上的額外間距 -- 可選選項 pady:設(shè)置垂直方向上的額外間距 -- 可選選項 stretch:該選項控制當行的高度大于嵌入組件的高度時,嵌入組件是否延伸。默認值是 False,表示組件保持原形;設(shè)置為 True 表示將該組件垂直部分延伸至行的高度 -- 可選選項 window:指定一個已經(jīng)創(chuàng)建好的 window 組件,該組件必須是 Text 組件的子組件
window_names() -- 返回 Text 組件中嵌入的所有 window 對象的名字
xview(*args) -- 該方法用于在水平方向上滾動 Text 組件的內(nèi)容,一般通過綁定 Scollbar 組件的 command 選項來實現(xiàn)(具體操作參考:Scrollbar) -- 如果第一個參數(shù)是 "moveto",則第二個參數(shù)表示滾動到指定的位置:0.0 表示最左端,1.0 表示最右端 -- 如果第一個參數(shù)是 "scroll",則第二個參數(shù)表示滾動的數(shù)量,第三個參數(shù)表示滾動的單位(可以是 "units" 或 "pages"),例如:xview("scroll", 3, "units") 表示向右滾動三行
xview_moveto(fraction) -- 跟 xview("moveto", fraction) 一樣
xview_scroll(number, what) -- 跟 xview("scroll", number, what) 一樣
yview(*args) -- 該方法用于在垂直方向上滾動 Text 組件的內(nèi)容,一般通過綁定 Scollbar 組件的 command 選項來實現(xiàn)(具體操作參考:Scrollbar) -- 如果第一個參數(shù)是 "moveto",則第二個參數(shù)表示滾動到指定的位置:0.0 表示最頂端,1.0 表示最底端 -- 如果第一個參數(shù)是 "scroll",則第二個參數(shù)表示滾動的數(shù)量,第三個參數(shù)表示滾動的單位(可以是 "units" 或 "pages"),例如:yview("scroll", 3, "pages") 表示向下滾動三頁
yview_moveto(fraction) -- 跟 yview("moveto", fraction) 一樣
yview_scroll(number, what) -- 跟 yview("scroll", number, what) 一樣
|