文字部件的建立及其選項
部件主要作為處理多行字串, 更可作為文字編輯器, 可以混合不同字型, 顏色, 圖片(圖片被視為單一字元處理), 也可以在文字部件中嵌入其他的部件, 該部件也被視為單一的字元.
text = tk.Text(parent, option, ...)
選項 | 說明 |
---|---|
autoseparators | undo=True 時, 是否在每次插入或刪除後自動將分隔符新增到 undo 堆疊 |
bg or background | 預設背景色 |
bd or borderwidth | 外框的寛度, 內定為 2 點素 |
cursor | 當滑鼠移到部件處時,所顯示的滑鼠圖示 |
exportselection | 文字可否複製到剪貼簿 0/1 |
font | 預設文字字型 |
fg or foreground | 預設文字及點陣圖的顏色 |
height | 根據 font 選項的行數 |
highlightbackground | 非聚焦時的聚焦顏色 |
highlightcolor | 聚焦時的聚焦顏色 |
highlightthickness | 聚焦厚度,內定 1, 0 則無 |
insertbackground | 插入游標的背景顏色,內定為黑色 |
insertborderwidth | 插入游標外框寛度,內定為 0 |
insertofftime | 插入游標消失的時間,內定為 300 ms |
insertontime | 插入游標顯現的時間,內定為 600 ms |
insertwidth | 插入游標寛度,內定為 2 點素 |
maxundo | 設定 undo 堆疊的最大保留次數, -1 為不限次數 |
padx | 水平間距,內定為 1 點素 |
pady | 垂直間距,內定為 1 點素 |
relief | 外框花樣,內定為 SUNKEN |
selectbackground | 被選擇文字的背景顏色 |
selectborderwidth | 被選擇文字的外框寛度 |
selectforeground | 被選擇文字的前景顏色 |
spacing1 | 段落前距, 內定 0 點素 |
spacing2 | 段落中距, 內定 0 點素 |
spacing3 | 段落後距, 內定 0 點素 |
state | NORMAL 或 DISABLED |
tabs | 定位符位置 |
takefocus | TAB 鍵在部件是否會迴圈焦點 0/1 |
undo | 是否可以 undo |
width | 部件的寛度 (標準字寛) |
wrap | 換行的方法, 內定為 CHAR, WORD, NONE |
xscrollcommand | 水平捲軸 scrollbar.set () 方法 |
yscrollcommand | 垂直捲軸 scrollbar.set () 方法 |
文字部件的索引方式
索引 index 指連續兩個字元中間的位置, 以字串代表值.
選項 | 說明 |
---|---|
line.column | 字串, 第line行 (從 1 開始), 第column位置 (從 0 開始) |
line.end | 字串, 第 line 行最後處 |
tk.INSERT | 插入游標位置, 同 ‘insert’ |
tk.CURRENT | 最近滑鼠位置, 同 ‘current’ |
tk.END | 文字最後的位置, 同 ‘end’ |
tk.SEL_FIRST | 選擇區的起點, 同 ‘sel.first’ |
tk.SEL_LAST | 選擇區的終點, 同 ‘sel.last’ |
markname | 字串, 使用標記名的標記的位置 |
tag.first | 字串, 標籤的起點 |
tag.last | 字串, 標籤的終點 |
@x,y | 字串, 最接近座標位置 (x, y) 的字元前 |
embedded-object | 內嵌部件前 |
注: 以下內容可以加入以上索引, 取得更復雜的索引方式, 空格可省略, 可跨行.
選項 | 說明 |
---|---|
+ n chars(c) | 向後 n 個字元 |
- n chars(c) | 向前 n 個字元 |
+ n lines(l) | 向上 n 行, 如果長度不夠, 會在行尾 |
- n lines(l) | 向下 n 行, 如果長度不夠, 會在行尾 |
linestart | 行前 |
lineend | 行後 |
wordstart | 索引所在的字前 |
文字部件的標記 (mark)
標記為一不含句點及空格的字串, 用來代表一個索引值, 比如 tk.INSERT, tk.CURRENT. 如果內文修改不影響標記相鄰部份, 標記的位置不會改變.
標記有個定位方式 Gravity, 可以是 tk.LEFT 或 tk.RIGHT, 在標記處插入新字串時, 前者標記保留在左側, 後者則標記保留在右側.
刪除含有標記的字串, 不會刪除標記.
文字部件的標籤 (tag)
標籤tag 用來代表具有某些相同選項(如字型, 顏色, 事件等) 專案不含句點及空格的字串, 用來代表某一群具有某些同樣選項的專案, 比如tk.SEL 代表被選擇的文字專案.
每個專案可以對應多個標籤, 同樣標籤也可以對應多個專案, 如果不同的標籤對應到同一個專案, 其選項的設定不同, 因為標籤是以堆疊方式來管理, 因此以後設的標籤選項而定.
文字部件的定位符
內定的定位符位置是8 個字元, 自定例如tabs=(‘3c’, ‘5c’, ‘12c’), 後面的所有定位符位置將是同距於定位符間的最後一個距離(12c - 5c = 7c)
內定的定位方式是左邊對齊tk.LEFT, 也是可是tk.RIGHT, tk.CENTER, tk.NUMERIC (小數點對齊), 例如tabs=(‘3c’, ‘5c’, tk.RIGHT, ‘12c’, tk.CENTER)
文字部件的方法
方法 | 說明 |
---|---|
bbox(index) | 取得輸入區字串索引index 所在的字元,左上角的座標(x, y), 寛度/ 高度w/h, 返回(x, y, w, h), 如果沒有字則返回None, 如果未更新update_idletasks(), 可能不會取得準確的資訊 |
compare(index1, op, index2) | 比較兩個索引的位置, op 為 ‘<’, ‘<=’, ‘==’, ‘!=’, ‘>=’, or ‘>’ |
delete(index1, index2=None) | 刪除索引 index1 處的字元, 或 index1 處到 index2 處前的字串 |
dlineinfo(index) | 取得索引index 所在的行,左上角的座標(x, y), 寛度/ 高度w/h, 返回(x, y, w, h), 如果沒有字則返回None,如果未更新update_idletasks(), 可能不會取得準確的資訊 |
edit_modified(arg=None) | 無引數返回, True 設定, False 清除文字修改的旗標, 旗標以部件內容有無修改為準 |
edit_redo() | 執行 redo |
edit_reset() | 清除 undo 堆疊 |
edit_separator() | 放一個 seperator 進堆疊, 用來界定下一個 undo 的還原步驟範圍 |
edit_undo() | 執行 undo (所有上回放入 seperator 後的改變, 如果沒有 seperator, 則 undo 全部), 空的 undo 堆疊會引起錯誤 |
image_create(index[, option=value, …]) | 在索引的地方插入圖片, 選項有 align 垂直對齊位置top/center/bottom/baseline (文字的底線) image 圖片< br>name 圖片的名稱, 沒有設定會產生為#number padx 左右間隔 pady 上下間隔 |
get(index1, index2=None) | 返回索引index1 處的字元, 或index1 處到index2 處前的字串, 其中的圖片及部件都會被省略, 只返回文字部份, 多行以’\n’來表示 |
image_cget(index, option) | 返回索引所指圖片的某選項值 |
image_configure(index, option, …) | 設定索引所指圖片的各選項值, 無選項則返回選項值的字典 |
image_names() | 返回文字部件中所有圖片的名稱 tuple |
index(i) | 返回相關位置的索引值’line.char’, 引數有END (行末), INSERT (插入點), ANCHOR, SEL_FIRST (前選擇點), SEL_LAST (後選擇點), “@x ”(近x 處) |
insert(index, text, *tags) | 在索引處插入字串, 加入 tags 標籤中, 在插入處前後文字的標籤都會被忽略; 如果沒有給標籤, 則會被加上去 |
mark_gravity(mark, gravity=None) | 設定或返回一個標記 mark 的定位方式 gravity, tk.LEFT 或 tk.RIGHT |
mark_names() | 返回文字部件中所有的標記名稱, 包含 tk.INSERT 及 tk.CURRENT |
mark_next(index) | 返回索引處後的標記名稱, 無則返回空符; 如果索引是一個數值, 返回的是在該位置的第一個標記, 如是索引是一個標記, 則返回下一個標記,該標記可能會是在同一個數值位置 |
mark_previous(index) | 返回索引處前的標記名稱, 無則返回空符; 如果索引是一個數值, 返回的是在該位置的最後一個標記, 如是索引是一個標記, 則返回前一個標記, 該標記可能會是在同一個數值位置 |
mark_set(mark, index) | 設定在索引處的標記, 如果是新的標記, 將具有tk.RIGHT 的定位方式, 如果是已有的標記, 將會移到該新的位置, 這個方法可能會改變tk.INSERT/tk.CURRENT 的位置 |
mark_unset(mark) | 移除標記名, 不含 tk.INSERT 及 tk.CURRENT |
scan_dragto(x, y) | 滑鼠鍵按下事件處理程式中已標記位置時, 滑鼠滾動事件處理程式拖弋捲動部件, (x, y) 為位置 |
scan_mark(x, y) | 滑鼠鍵按下事件處理程式中標記位置 (x, y) |
search(pattern, index, option, …) | 按pattern (字串或正則式) 從索引處開始搜尋, 如果成功, 返回’line.char’, 否則返回空字元 選項有: backwards - 反向搜尋嗎, 內定為False count - tk.IntVar() 用來使用該變數的get() 方法, 得到符合pattern 的字串長度 exact - 設定True 使搜尋必須完全符合 forwards - 設定正向搜尋, 內定為True regexp - 設True 以使用Tcl 式的正則式, 內定為完全匹配, Tcl 式為python 正則式的字集, 支援. ^ [c1 …] (…) * + ? e1|e2 |
see(index) | 捲動部件, 使索引位置可見 |
tag_add(tagName, index1, index2=None) | 關連標籤名 tagName 到索引 index1 處的字元, 或 index1 處到 index2 處前的字串 |
tag_bind(tagName, sequence, func, add=None) | 繫結標籤tagName 的事件sequence 到回撥函式func, add ‘+’ 為增加新的函式, 否則為取代所有舊的函式; 只有前兩個引數,則返回事件相關的函式; 只有第一個引數, 則返回所有相關函式的列表 |
tag_cget(tagName, option) | 返回標籤的選項值 |
tag_config(tagName, option, …) | 設定各選項的值, 沒選項時, 則以字典的方式返回全部的選項值 選項如下 background - 背景色, 不能使用bg bgstipple - 在設定背景色的情況下, 為使背景可以顯示灰化, 設定為一個標準的點陣圖名 borderwidth - 標籤所代表的文字外框寛度, 內定為0, 不能使用bd fgstipple - 為使前景可以顯示灰化, 設定為一個標準的點陣圖名 font - 文字的字型 foreground - 前景色, 不能使用fg justify - 多行文字的對齊方式,LEFT (內定) /RIGHT/CENTER lmargin1 - 第一行的縮格, 內定為0 lmargin2 - 其他行的縮格, 內定為0 offset - 文字上移(正值)或下移(負值)量, 以文字的基準線為參考點, 比如上標或下標 overstrike - 是否畫上文字的水平中線, 比如刪除線 relief - 花邊樣式, 內定為FLAT rmargin - 右邊的縮格量, 內定為0 spacing1 - 前垂直間距, 內定為0 spacing2 - 內垂直間距, 內定為0 spacing3 - 後垂直間距, 內定為0 tabs - 設定定位符的位置 underline - True 設定下底線 wrap - 換行的長度 |
tag_delete(tagName, …) | 刪除標籤名, 其相關的繫結, 選項, 字串的關連性都會移除 |
tag_lower(tagName, belowThis=None) | 下移標籤 tagName 至 belowThis 標籤下方, 無 belowThis, 則移到標籤堆疊的最下方 |
tag_names(index=None) | 返回索引處所有相關的標籤名, 或者文字部件內所有的標籤名 |
tag_nextrange(tagName, index1, index2=None) | 從索引index1 開始到index2 (或到文字結束處), 如果存在tagName 標籤, 返回(i0, i1), i0 為第一個起始位置, i1 為最後一個結束位置. 沒有則返回空字元 |
tag_prevrange(tagName, index1, index2=None) | 從索引index1 之前到index2 (或到文字結束處), 如果存在tagName 標籤, 返回(i0, i1), i0 為第一個起始位置, i1 為最後一個結束位置. 沒有則返回空字元 |
tag_raise(tagName, aboveThis=None) | 上移標籤 tagName 至 aboveThis 標籤上方, 無 aboveThis, 則移到標籤堆疊的最上方 |
tag_ranges(tagName) | 返回標籤名所有的文字位置列表 [s0, e0, s1, e1, …], si 為索引起點, ei 為索引終點 |
tag_remove(tagName, index1, index2=None) | 移除從索引 index1 (到 index2) 的標籤名 tagName |
tag_unbind(tagName, sequence, funcid=None) | 移除標籤名的繫結事件回撥函式 |
window_cget(index, option) | 返回嵌入文字中索引處部件的選項值 |
window_configure(index, option) | 設定嵌入文字中索引處部件的各選項值, 或返回全部選項的字典值 |
window_create(index, option, …) | 在索引處建立部件及其選項值, 或使用回撥來建立部件 選項有 align - 設定部件垂直的定位, CENTER (內定), TOP , BOTTOM, BASELINE create - 建立子部件的無引數回撥函式, 該部件必須是文字部件的子部件, 該函式返回該子部件 padx - 子部件左右間隔, 內定為0 pady - 子部件上下間隔, 內定為0 stretch - 如果行高比子部件高, 是否拉長子部件, 內定為0, 1 則為拉長, 而且align 選項將為無效 window - 嵌入文字中的子部件, 該部件必須是文字部件的子部件 |
window_names() | 返回文字部件中所有子部件的名稱列表 |
xview(tk.MOVETO, fraction) | 供水平捲軸 scrollbar 選項 command 使用,fraction 0.0 為最左處, 1.0 為右處 |
xview(tk.SCROLL, n, what) | 水平滾動畫布 n 個單位,單位 what 為 tk.UNITS (字元) 或 tk.PAGES (頁) |
xview_moveto(fraction) | 同 xview (tk.MOVETO, fraction) |
xview_scroll(n, what) | 同 xview (tk.SCROLL, n, what) |
yview(tk.MOVETO, fraction) | 垂直滾動畫布,類似 xview (tk.MOVETO,…) |
yview(tk.SCROLL, n, what) | 垂直滾動畫布,類似 xview (tk.SCROLL,…), tk.UNITS (行數) |
yview_moveto(fraction) | 垂直滾動畫布,類似 xview_moveto() |
yview_scroll(n, what) | 垂直滾動畫布,類似 xview_scroll () |
範例視窗及程式碼
import tkinter as tk
def add_text(widget, sequence):
global tags
for i, (font, paragraph, color) in enumerate(sequence):
tags[i]=f'tag_{i}'
widget.insert(tk.END, paragraph+'\n', (tags[i],))
widget.tag_configure(tags[i], foreground=color, font=font, spacing1=20)
tags = [None]*5
root = tk.Tk()
root.wm_title("Text Demo")
font12 = ('Courier New', 12)
font16 = ('Courier New', 16, 'bold')
font20 = ('Courier New', 20, 'bold')
t = [[font20, 'Demo Text', 'blue'],
[font16, 'Chapter 1', 'red'],
[font12, 'Python is an easy to learn, powerful programming language. '
'It has efficient high-level data structures and a simple but '
'effective approach to object-oriented programming. Python’s '
'elegant syntax and dynamic typing, together with its interpreted '
'nature, make it an ideal language for scripting and rapid '
'application development in many areas on most platforms.', 'black'],
[font16, 'Chapter 2', 'red'],
[font12, 'This tutorial introduces the reader informally to the basic '
'concepts and features of the Python language and system. It '
'helps to have a Python interpreter handy for hands-on experience'
', but all examples are self-contained, so the tutorial can be '
'read off-line as well.', 'black'] ]
text = tk.Text(bg='white', font=font12, width=80, height=20, bd=10, padx=5, pady=5)
text.grid(row=0, column=0)
add_text(text, t)
text.tag_config(tags[0], justify=tk.CENTER, underline=True)
root.mainloop()
本作品採用《CC 協議》,轉載必須註明作者和本文連結