Python Tk GUI系列筆記(tkinter篇(上)) 第十一章~第十八章
〇、前言
此系列主要介紹tkinter庫——Tk圖形用戶界面(GUI)及其相關(guān)內(nèi)容,內(nèi)容參考以下網(wǎng)站:
TkDocs:https://tkdocs.com/(前四十一章)
C語言中文網(wǎng):http://c.biancheng.net/tkinter/(前三十一章)
Python tkinter(GUI編程)模塊最完整教程(上/中/下):(前四十一章)
https://blog.csdn.net/qq_48979387/article/details/125706562
https://blog.csdn.net/qq_48979387/article/details/125806479
https://blog.csdn.net/qq_48979387/article/details/125768994
Python tkinter一些十分靈活的運(yùn)用方式和實(shí)用函數(shù):(第四十二章)
https://blog.csdn.net/qq_48979387/article/details/119695934
tkinter.ttk --- Tk 風(fēng)格的控件:
https://docs.python.org/zh-cn/3.11/library/tkinter.ttk.html(33~41章)
Tcl/Tk文檔:
https://www.tcl.tk/man/tcl8.6/TkCmd/contents.html(前四十二章)
ttkbootstrap:https://ttkbootstrap.readthedocs.io/en/latest/zh/(43~53章)
其他參考會(huì)在章節(jié)前列出
部分內(nèi)容來源網(wǎng)絡(luò)
# 操作系統(tǒng)為Windows 7
Python版本3.8,Tk版本8.6
# 在“屬性項(xiàng)數(shù)據(jù)庫”及以后章節(jié)使用Python版本3.10,對(duì)運(yùn)行結(jié)果基本無影響
運(yùn)行結(jié)果的窗口圖片會(huì)縮放到80%,96 dpi
有些運(yùn)行結(jié)果會(huì)使用gif動(dòng)圖展示,或是有額外的補(bǔ)充文件,需到Python tkinter result文件中的查看
# gif錄制軟件:ScreenToGif
# 此系列的WPS筆記會(huì)在本系統(tǒng)的最后一個(gè)專欄給出
顏色代表含義:
淡灰色:注釋,一般前面有#
綠色:示例
橙色:補(bǔ)充
紫色:示例中的input用戶輸入內(nèi)容
紅色、藍(lán)色:突出或裝飾文字作用
部分內(nèi)容可能不嚴(yán)謹(jǐn)或者錯(cuò)誤,歡迎指出
# 如果Python無tkinter可參考這篇專欄cv14759634

十一、輸入控件(Entry)
(1)、概念
輸入控件的作用是允許用戶輸入單行文本(多行見文本框控件(Text))
(2)、演示圖

(3)、構(gòu)造方法
tkinter.Entry(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
background, bd, bg, borderwidth, cursor, disabledbackground, disabledforeground, exportselection, fg, font, foreground, highlightbackground, highlightcolor, highlightthickness, insertbackground, insertborderwidth, insertofftime, insertontime, insertwidth, invalidcommand, invcmd, justify, readonlybackground, relief, selectbackground, selectborderwidth, selectforeground, show, state, takefocus, textvariable, validate, validatecommand, vcmd, width, xscrollcommand
1.disabledbackground
設(shè)置當(dāng)控件狀態(tài)為'disabled'時(shí)顯示的背景色
2.insertbackground
指定插入光標(biāo)(鍵盤輸入插入到文本的點(diǎn))的顏色,默認(rèn)值由系統(tǒng)指定(一般黑色)
3.insertborderwidth
指定插入光標(biāo)邊框?qū)挾龋疫吙驑邮绞?#39;raised',確保insertwidth屬性的值至少是該值的兩倍
默認(rèn)值為0
4.insertwidth
指定插入光標(biāo)的寬度,默認(rèn)值為2
5.insertofftime
指定插入光標(biāo)閃爍后停歇(處于“滅”狀態(tài))花費(fèi)的時(shí)間,為零則光標(biāo)一直處于“亮”狀態(tài)
默認(rèn)值為300
6.insertontime
指定插入光標(biāo)每次閃爍(處于“亮”狀態(tài))花費(fèi)的時(shí)間,為零則不顯示插入光標(biāo)
默認(rèn)值為600
# 如果以上兩個(gè)屬性同時(shí)為0,實(shí)測光標(biāo)一直處“亮”狀態(tài);如果為負(fù)則會(huì)引起卡頓
7.selectbackground
指定選中文字時(shí)的背景色,默認(rèn)值由系統(tǒng)指定
8.selectforeground
指定選中文字時(shí)的前景色,默認(rèn)值由系統(tǒng)指定
9.selectborderwidth
指定選中文字時(shí)的邊框?qū)挾?,默認(rèn)值為0
10.show
指定文本框內(nèi)容以何種樣式的字符顯示,默認(rèn)值為空字符串(不指定)
# 例如密碼可設(shè)置為'*'
示例:
運(yùn)行結(jié)果:
11.readonlybackground
指定當(dāng)控件state屬性設(shè)置為'readonly'時(shí)的背景色
12.exportselection
是否將輸入框選中的文本復(fù)制到剪貼板,默認(rèn)值為1
# 實(shí)測對(duì)輸入控件的效果不同,在選中文本后單擊鼠標(biāo)中間會(huì)在選中文本前面粘貼一份(不會(huì)復(fù)制到剪貼板)
13.xscrollcommand
見章節(jié)“滾動(dòng)條控件(Scrollbar)”
14.validate
15.validatecommand, vcmd
16.invalidcommand, invcmd
見此章“(7)、驗(yàn)證功能”
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
background, bg, disabledforeground, foreground, fg, highlightbackground, highlightcolor:默認(rèn)值由系統(tǒng)指定
borderwidth, bd:默認(rèn)值為1
cursor:默認(rèn)值為'xterm'(輸入光標(biāo))
highlightthickness:默認(rèn)值為0
justify:默認(rèn)值為'left'
relief:默認(rèn)值為'sunken'
state:默認(rèn)值為'normal'。注意在輸入控件多了'readonly'(只讀)狀態(tài),去掉了'active'狀態(tài)
takefocus:默認(rèn)值為空字符串
textvariable:默認(rèn)值為空字符串。注意可以使用控制變量的.get()方法獲得輸入控件的值
width:默認(rèn)值為20。注意單位是字符數(shù)
# 注意沒有height,因?yàn)镋ntry是允許輸入單行文本
(6)、方法
1.關(guān)于索引
輸入控件的索引可以是以下幾種形式,“@數(shù)字”及后面的是字符串,區(qū)分大小寫
適用于輸入控件需要索引的方法
1.1.數(shù)字
正向索引(從0開始),可以是整數(shù)或字符串
1.2.@數(shù)字
數(shù)字被視為文本框的X坐標(biāo)(像素為單位,數(shù)字不能是'3c'等形式),索引對(duì)應(yīng)文本框X坐標(biāo)的字符
# X坐標(biāo)也就是水平視圖
1.3.end
索引對(duì)應(yīng)文本框最后一個(gè)字符
1.4.insert
索引對(duì)應(yīng)插入光標(biāo)的下一個(gè)字符
1.5.sel.first
索引對(duì)應(yīng)選中文字的第一個(gè)字符。如果沒有選中文字則拋出TclError異常
1.6.sel.last
索引對(duì)應(yīng)選中文字的最后一個(gè)字符。如果沒有選中文字則拋出TclError異常
# 以上字符串可以用它們的縮寫形式,例如'e'或'sel.l'
2.delete(first, last=None)
刪除文本框內(nèi)正向索引區(qū)間[first, last)的文本
3.get()
獲取文本框內(nèi)的文本
4.icursor(index)
在index處插入光標(biāo)
5.index(index)
返回index對(duì)應(yīng)的數(shù)字索引
6.insert(index, string)
在index處插入string
示例:
運(yùn)行結(jié)果:
7.scan_mark(x)
8.scan_dragto(x)
見章節(jié)“拖拽與縮放功能”
9.selection_from(index)
# 別名:select_from
設(shè)置選定區(qū)的ANCHOR位置為index
# 選定區(qū)是選定文本的區(qū)域
# ANCHOR位置指用鼠標(biāo)點(diǎn)擊文本框文本的位置、shift加箭頭選中文本后的位置、shift加箭頭選中文本后取消選中文本的開始選中文本的位置等等
# 只用箭頭鍵移動(dòng)插入光標(biāo)不會(huì)改變?cè)瓉淼腁NCHOR位置
# 插入光標(biāo)位置對(duì)應(yīng)的ANCHOR位置具體是插入光標(biāo)后邊的字符的正向索引
10.selection_to(index)
# 別名:select_to
選中從ANCHOR位置到index的字符位置(不包括)之間的所有文本
11.selection_adjust(index)
# 別名:select_adjust
確保選定區(qū)包含指定index的字符。如果選定區(qū)已包括則無效果,否則選定就會(huì)從ANCHOR位置擴(kuò)展到包括index的字符位置
# 實(shí)測如果已存在選定區(qū),則會(huì)從選定區(qū)的位置擴(kuò)展,并將ANCHOR改為選定區(qū)距離index遠(yuǎn)的那一端的索引
12.selection_present()
# 別名:select_present
如果選定區(qū)存在字符則返回True,否則返回False
13.selection_range(start, end)
# 別名:select_range
選中索引區(qū)間[start, end)之間的文本
14.selection_clear()
# 別名:select_clear
清除控件內(nèi)的選定區(qū)
示例:
運(yùn)行結(jié)果:
開始時(shí):

輸入文本后,點(diǎn)擊8與9之間的間隔并分別點(diǎn)擊從左到右、從上到下的第2個(gè)、第3個(gè)按鈕:
# 當(dāng)前ANCHOR位置為8


依次點(diǎn)擊第4個(gè)、第3個(gè)按鈕:
# 當(dāng)前ANCHOR位置為8

# 當(dāng)前ANCHOR位置為2

依次點(diǎn)擊第5個(gè)、第6個(gè)、第5個(gè)按鈕:
True
False
補(bǔ)充:xview和yview分別是水平視圖和垂直視圖
# 注意,移動(dòng)視圖并不會(huì)改變插入光標(biāo)的位置
15.xview(*args)
無參數(shù)調(diào)用,返回當(dāng)前的水平視圖位置:
(左邊到達(dá)水平視圖的百分?jǐn)?shù), 右邊到達(dá)水平視圖的百分?jǐn)?shù))
一個(gè)參數(shù)調(diào)用,則是一個(gè)索引,將視圖的水平位置移動(dòng)到索引處
多個(gè)參數(shù)調(diào)用,則第一個(gè)參數(shù)是屬性項(xiàng),其他的參數(shù)是傳入值,屬性項(xiàng)有moveto和scroll(或它們的縮寫,見下面的兩個(gè)方法)
16.xview_moveto(fraction)
將左邊到達(dá)水平視圖移動(dòng)到相應(yīng)百分?jǐn)?shù)fraction
17.xview_scroll(number, what)
根據(jù)以what為單位的number移動(dòng)水平視圖
number——是一個(gè)整數(shù),可以為負(fù)
what——可選值如下(可使用它們的縮寫):
'units'(單元):一個(gè)字符為一個(gè)單元
'page'(頁數(shù)):一次占滿視圖的為一頁
示例:
運(yùn)行結(jié)果:
開始時(shí):

將以下文本輸入到文本框:
1222222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333333
點(diǎn)擊第1個(gè)按鈕:

(0.49056603773584906, 1.0)
依次點(diǎn)擊第3個(gè)、第1個(gè)、第2個(gè)按鈕:

# 此時(shí)左邊只有一個(gè)字符'1'
依次點(diǎn)擊第4個(gè)、第5個(gè)按鈕:


補(bǔ)充:
實(shí)際上,xview(), xview_moveto(), xview_scroll()方法來自父類XView,相對(duì)應(yīng)的還有yview(), yview_moveto(), yview_scroll()方法來自YView
后文會(huì)在支持XView或YView的控件方法最后換行加上“支持XView/YView”
(7)、驗(yàn)證功能
1.概念
輸入控件可以對(duì)輸入內(nèi)容進(jìn)行驗(yàn)證,比如只能輸入英文字母、只能輸入數(shù)字等等
通過以下屬性項(xiàng)進(jìn)行設(shè)置
# 實(shí)測當(dāng)指定textvariable時(shí),如果回調(diào)函數(shù)不返回True,則驗(yàn)證功能會(huì)失效
2.validate
指定何時(shí)進(jìn)行驗(yàn)證,值是一個(gè)字符串,可選擇以下的值(或它們的縮寫):
focus:當(dāng)控件獲得或失去焦點(diǎn)的時(shí)候驗(yàn)證
focusin:當(dāng)控件獲得焦點(diǎn)的時(shí)候驗(yàn)證
focusout:當(dāng)控件失去焦點(diǎn)的時(shí)候驗(yàn)證
key:當(dāng)輸入框被編輯的時(shí)候驗(yàn)證
all:當(dāng)出現(xiàn)以上任何一種情況的時(shí)候驗(yàn)證
none:默認(rèn)不啟用驗(yàn)證功能,注意是字符串'none'
3.validatecommand(別名:vcmd)
指定用戶自定義的回調(diào)函數(shù)(驗(yàn)證函數(shù))。如果文本有效則使回調(diào)函數(shù)返回True,否則返回False。當(dāng)validate='key'或'all'時(shí),如果回調(diào)函數(shù)返回False,文本內(nèi)容將保持不變(這里的保持不變是指驗(yàn)證時(shí)的文本)
可以提供一些額外的替換代碼,這些替換代碼作為位置參數(shù)傳入回調(diào)函數(shù):
(回調(diào)函數(shù), 替換代碼1, 替換代碼2)
# 替換代碼與格式化字符串相似,但有些替換代碼后面不能接控件代碼、字母、數(shù)字等
回調(diào)函數(shù)必須通過控件的register()方法進(jìn)行注冊(cè)才能使用替換代碼
補(bǔ)充:register(func, subst=None)
# 定義在Misc類的方法,所有控件都可調(diào)用
返回一個(gè)新創(chuàng)建的Tcl函數(shù),當(dāng)這個(gè)函數(shù)被調(diào)用時(shí)會(huì)調(diào)用Python函數(shù)
subst——在func之前調(diào)用的函數(shù),返回值作為位置參數(shù)傳遞給func
# 可以使用裝飾器語法進(jìn)行注冊(cè)(在函數(shù)前加@register)
替換代碼:
%d:動(dòng)作代碼。0表示試圖刪除;1表示試圖插入;-1表示回調(diào)是由獲得或失去焦點(diǎn)、textvariable發(fā)生變化而被調(diào)用
%i:當(dāng)用戶試圖刪除或插入文本時(shí)的起始索引位置;-1表示回調(diào)是由獲得或失去焦點(diǎn)、textvariable發(fā)生變化而被調(diào)用
%P:返回用戶試圖刪除或插入文本后文本框的文本
%s:返回用戶試圖刪除或插入文本前文本框的文本
%S:返回用戶試圖刪除或插入的文本
# 實(shí)測%P、%s、%S當(dāng)替換代碼字符串不止有它們自己時(shí)空字符串表示為'{}',它們?cè)诔噲D刪除或插入文本的回調(diào)中是空字符串
%v:表示當(dāng)前控件的validate參數(shù)的值
%V:表示回調(diào)的原因,值為'focusin', 'focusout', 'key'或''force''(回調(diào)由textvariable發(fā)生變化而被調(diào)用)
%W:表示控件的名字
# %%表示字符'%'
4.invalidcommand(別名:invcmd)
當(dāng)validatecommand指定的回調(diào)函數(shù)返回False時(shí),設(shè)置方法與validatecommand相同
示例:
運(yùn)行結(jié)果:
十二、單選框按鈕控件(Radiobutton)
(1)、概念
單選框按鈕控件僅允許用戶在幾個(gè)互斥的選項(xiàng)值之間選擇單一的一個(gè)
單選框按鈕控件通常都是成組出現(xiàn)的,所有控件都使用相同的變量。其中可以包含文本或圖像,每一個(gè)按鈕都可以與一個(gè)Python函數(shù)相關(guān)聯(lián)
要將幾個(gè)單選框按鈕控件組成一組,可以創(chuàng)建一個(gè)控制變量,并將每個(gè)單選框按鈕控件的variable屬性設(shè)置為該變量,將value屬性設(shè)置為與控制變量相同類型的唯一值
(2)、演示圖

(3)、構(gòu)造方法
tkinter.Radiobutton(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
activebackground, activeforeground, anchor, background, bd, bg, bitmap, borderwidth, command, compound, cursor, disabledforeground, fg, font, foreground, height, highlightbackground, highlightcolor, highlightthickness, image, indicatoron, justify, offrelief, overrelief, padx, pady, relief, selectcolor, selectimage, state, takefocus, text, textvariable, tristateimage, tristatevalue, underline, value, variable, width, wraplength
1.indicatoron
指示是否顯示單選框按鈕的指示器(前面的小圓圈)。如果值為0(默認(rèn)值為1),則指示器會(huì)消失,并且控件變成一個(gè)“按壓式”按鈕,選中按鈕時(shí)按鈕樣式為'sunken',取消選中按鈕時(shí)按鈕樣式為'raised'
2.offrelief
指定當(dāng)indicatoron屬性值為0時(shí)取消選中按鈕時(shí)的按鈕樣式,默認(rèn)值為'raised'
3.selectcolor
當(dāng)按鈕被選中時(shí)的顏色。默認(rèn)值由系統(tǒng)指定
# 實(shí)測如果indicatoron不為0,則按鈕指示器的顏色會(huì)一直是該屬性指定的顏色;如果為0,則該屬性指定的顏色作為按鈕被選中后的背景色
4.selectimage
當(dāng)按鈕被選中時(shí)的圖像,只在設(shè)置image屬性之后才能生效
5.variable
與組內(nèi)其他按鈕共享的控制變量
6.value
當(dāng)按鈕被選中時(shí),它的variable屬性的控制變量被設(shè)置為此屬性的值
7.tristatevalue
下面為此屬性的實(shí)測:
使按鈕處于“三態(tài)”或“混合”狀態(tài)的值,當(dāng)控制變量的值等于該屬性值但不等于value的值時(shí)按鈕會(huì)處于這種狀態(tài)。如果按鈕有指示器,則處于這種狀態(tài)的指示器會(huì)選中變灰
另外,當(dāng)控制變量的值為空字符串時(shí),也會(huì)處于這種狀態(tài)
8.tristateimage
下面為此屬性的實(shí)測:
當(dāng)按鈕處于“三態(tài)”或“混合”狀態(tài)時(shí)的圖片,只在設(shè)置image屬性之后才能生效
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
activebackground, activeforeground, background, bg, disabledforeground, foreground, fg, highlightbackground, highlightcolor:默認(rèn)值由系統(tǒng)指定
bitmap, command, cursor, image, overrelief, takefocus, text, textvariable:默認(rèn)值為空字符串
anchor:默認(rèn)值為'center'
borderwidth, bd:默認(rèn)值為2
compound:默認(rèn)值為'none'
font:默認(rèn)值為'TkDefaultFont'
width, height:默認(rèn)值都為0
highlightthickness:默認(rèn)值為1
justify:默認(rèn)值為'center'
padx, pady:默認(rèn)值都為1
relief:默認(rèn)值為'flat'
state:默認(rèn)值為'normal'
underline:默認(rèn)值為-1
wraplength:默認(rèn)值為0
(6)、方法
1.flash()
使按鈕在活動(dòng)狀態(tài)和正常狀態(tài)的顏色之間閃爍幾次,如果按鈕狀態(tài)是disabled則被忽略
2.invoke()
如果按鈕狀態(tài)不是disabled且command已指定,則調(diào)用command并返回結(jié)果
# 注意這會(huì)使單選框按鈕處于選中狀態(tài)
3.select()
使按鈕處于選中狀態(tài)
4.deselect()
取消按鈕的選中狀態(tài)
# 實(shí)測取消單選按鈕的選中狀態(tài)會(huì)使對(duì)應(yīng)控制變量的值變?yōu)榭兆址?/span>
示例:
from tkinter import *
root = Tk()
?
iv = IntVar(value=0)
r1 = Radiobutton(text='A.選項(xiàng)1', variable=iv, value=1)
r2 = Radiobutton(text='B.選項(xiàng)2,控制變量值為1時(shí)進(jìn)入“三態(tài)”', variable=iv,
?????????????????value=2, tristatevalue=1)
red_p = PhotoImage(file='red.png')
blue_p = PhotoImage(file='blue.png')
r3 = Radiobutton(image=red_p, variable=iv,
?????????????????value=3, tristateimage=blue_p)
r4 = Radiobutton(text='D.選項(xiàng)4,選中時(shí)背景變綠色', selectcolor='green',
?????????????????indicatoron=0, variable=iv, value=4)
r5 = Radiobutton(text='E.選項(xiàng)5,選中后取消選中自身', variable=iv, value=5,
?????????????????command=lambda: r5.deselect())
r1.pack(anchor='w')
r2.pack(anchor='w')
r3.pack(anchor='w')
r4.pack(anchor='w')
r5.pack(anchor='w')
Label(textvariable=iv).pack()
?
root.mainloop()
運(yùn)行結(jié)果:
十三、多選框按鈕控件(Checkbutton)
(1)、概述
多選框(復(fù)選框)按鈕控件允許用戶同時(shí)選擇多項(xiàng),各個(gè)選項(xiàng)之間屬于并列的關(guān)系
使用variable屬性設(shè)置按鈕相關(guān)聯(lián)的控制變量,再通過onvalue/offvalue屬性設(shè)置按鈕被勾選/取消勾選時(shí)相關(guān)聯(lián)的控制變量的值
# 多選框按鈕與單選框按鈕的不同在于它可以在勾選和取消勾選的狀態(tài)間切換
(2)、演示圖

(3)、構(gòu)造方法
tkinter.Checkbutton(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
activebackground, activeforeground, anchor, background, bd, bg, bitmap, borderwidth, command, compound, cursor, disabledforeground, fg, font, foreground, height, highlightbackground, highlightcolor, highlightthickness, image, indicatoron, justify, offrelief, offvalue, onvalue, overrelief, padx, pady, relief, selectcolor, selectimage, state, takefocus, text, textvariable, tristateimage, tristatevalue, underline, variable, width, wraplength
1.onvalue
當(dāng)多選框按鈕被勾選時(shí)控制變量的值,默認(rèn)值為1
# 當(dāng)控制變量的值等于此屬性的值時(shí),多選框按鈕會(huì)自動(dòng)被勾選
2.offvalue
當(dāng)多選框按鈕取消勾選時(shí)控制變量的值,默認(rèn)值為0
# 只有在切換勾選狀態(tài)時(shí)才改變控制變量的值
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
activebackground, activeforeground, background, bg, disabledforeground, fg, foreground, highlightbackground, highlightcolor, selectcolor:默認(rèn)值由系統(tǒng)指定
bitmap, command, cursor, image, overrelief, selectimage, takefocus, text, textvariable, tristateimage, tristatevalue, variable:默認(rèn)值為空字符串
anchor:默認(rèn)值為'center'
bd:默認(rèn)值為2
borderwidth:默認(rèn)值為2
compound:默認(rèn)值為'none'
font:默認(rèn)值為'TkDefaultFont'
height:默認(rèn)值為0
highlightthickness:默認(rèn)值為1
indicatoron:默認(rèn)值為1
justify:默認(rèn)值為'center'
offrelief:默認(rèn)值為'raised'
padx:默認(rèn)值為1
pady:默認(rèn)值為1
relief:默認(rèn)值為'flat'
state:默認(rèn)值為'normal'
underline:默認(rèn)值為-1
width:默認(rèn)值為0
wraplength:默認(rèn)值為0
(6)、方法
1.flash()
使按鈕在活動(dòng)狀態(tài)和正常狀態(tài)的顏色之間閃爍幾次,如果按鈕狀態(tài)是disabled則被忽略
2.invoke()
如果按鈕狀態(tài)不是disabled且command已指定,則調(diào)用command并返回結(jié)果
# 注意這會(huì)切換多選框按鈕的勾選狀態(tài)
3.select()
使按鈕處于勾選狀態(tài)
4.deselect()
取消按鈕的勾選狀態(tài)
5.toggle()
切換按鈕的勾選狀態(tài)
示例:
運(yùn)行結(jié)果:
運(yùn)行時(shí):

勾選一些按鈕點(diǎn)擊下方按鈕后:

十四、列表框控件(Listbox)
(1)、概念
列表框控件是一個(gè)顯示單行文本項(xiàng)目(條目)的列表,允許用戶瀏覽該列表并選擇一個(gè)或多個(gè)項(xiàng)目
# 這里的“項(xiàng)目”也就是元素,后文稱作“項(xiàng)目”或“項(xiàng)”
(2)、演示圖

(3)、構(gòu)造方法
tkinter.Listbox(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
activestyle, background, bd, bg, borderwidth, cursor, disabledforeground, exportselection, fg, font, foreground, height, highlightbackground, highlightcolor, highlightthickness, justify, relief, selectbackground, selectborderwidth, selectforeground, selectmode, setgrid, state, takefocus, width, xscrollcommand, yscrollcommand, listvariable
1.listvariable
應(yīng)是一個(gè)StringVar,它存放列表中所有的項(xiàng)目
當(dāng)調(diào)用它的.get()方法,將返回“('v0', 'v1', ...)”形式的字符串,其中每個(gè)vi(i是索引)是列表中每一個(gè)項(xiàng)目
# 注意是字符串而不是元組,可以用eval()內(nèi)置函數(shù)變成元組
設(shè)置這個(gè)控制變量的值(使用.set()或在創(chuàng)建時(shí)指定值)可以改變列表中的項(xiàng)目,值是一個(gè)包含項(xiàng)目的字符串,項(xiàng)目之間用空格分隔,例如'a b c'是項(xiàng)目a, b, c
2.activestyle
指定active line的樣式:
'underline':下劃線(默認(rèn)值)
'dotbox':虛線框
'none':無
# active line以下譯作“活動(dòng)行”,是當(dāng)前選中的一行,可通過箭頭改變,例如演示圖中的選項(xiàng)H
3.selectmode
設(shè)置選擇模式——可以選擇多少項(xiàng)、拖動(dòng)鼠標(biāo)的情況:
'single':只能選擇一項(xiàng),不能拖動(dòng)鼠標(biāo),方向鍵只改變活動(dòng)行
'browse'(默認(rèn)值):只能選擇一項(xiàng),選擇跟隨鼠標(biāo),方向鍵改變活動(dòng)行和選擇
'multiple':可以選擇多項(xiàng),不能拖動(dòng)鼠標(biāo),方向鍵只改變活動(dòng)行
'extended':可以選擇多項(xiàng),可以拖動(dòng)鼠標(biāo)或按住Shift選擇多行,但每次選擇都會(huì)使之前的選擇清空,除非按住Ctrl。方向鍵改變活動(dòng)行和選擇,按住Shift不會(huì)使之前的選擇清空
# 使用selectbackground, selectborderwidth, selectforeground屬性分別設(shè)置選中時(shí)的背景色、邊框?qū)挾?、前景?/span>
4.xscrollcommand
5.yscrollcommand
見章節(jié)“滾動(dòng)條控件(Scrollbar)”
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
background, bg, disabledforeground, fg, foreground, highlightbackground, highlightcolor, selectbackground, selectforeground:默認(rèn)值由系統(tǒng)指定
cursor, takefocus:默認(rèn)值為空字符串
bd:默認(rèn)值為1
borderwidth:默認(rèn)值為1
font:默認(rèn)值為'TkDefaultFont'
height:默認(rèn)值為10。注意高是項(xiàng)目數(shù)
highlightthickness:默認(rèn)值為1
justify:默認(rèn)值為'left'
relief:默認(rèn)值為'sunken'
selectborderwidth:默認(rèn)值為0
state:默認(rèn)值為'normal'
width:默認(rèn)值為20。注意寬是字符數(shù)
exportselection:默認(rèn)值為1。實(shí)測如果為1,則按Ctrl+C可復(fù)制已選中項(xiàng)目,否則不能
示例:
運(yùn)行結(jié)果:
運(yùn)行時(shí):

選擇一些項(xiàng)目:

點(diǎn)擊按鈕后:

(6)、方法
1.關(guān)于索引
# 具體說明見輸入控件
1.1.數(shù)字
正向索引(從0開始),可以是整數(shù)或字符串
1.2.activate
索引對(duì)應(yīng)活動(dòng)行
1.3.end
索引對(duì)應(yīng)最后一項(xiàng)。對(duì)于index()和insert()方法它是最后一項(xiàng)之后的一項(xiàng)
1.4.@x,y
x, y是數(shù)字,分別被視為列表框的X, Y坐標(biāo)(像素為單位,數(shù)字不能是'3c'等形式),索引對(duì)應(yīng)列表框X, Y坐標(biāo)的項(xiàng)
2.activate(index)
指定index為活動(dòng)行
3.delete(first, last=None)
刪除列表框內(nèi)正向索引區(qū)間[first, last]的項(xiàng)
4.get(first, last=None)
獲取列表框內(nèi)正向索引區(qū)間[first, last]的項(xiàng),返回“('v0', 'v1', ...)”形式的元組
# 注意這里返回的是元組而不是字符串
5.index(index)
返回index對(duì)應(yīng)的數(shù)字索引
6.insert(index, *elements)
在index處插入項(xiàng)。位置形參elements的每一個(gè)元素是一個(gè)項(xiàng)
7.curselection()
返回選擇項(xiàng)的索引。返回值是一個(gè)元組,按從小到大順序排列
# “選擇項(xiàng)”是已選中的項(xiàng)目
8.nearest(y)
返回距離Y坐標(biāo)(像素為單位,數(shù)字不能是'3c'等形式)最近的項(xiàng)的索引
9.see(index)
滾動(dòng)視圖使index可見
10.itemconfigure(index, cnf=None, **kw)
# 別名:itemconfig
設(shè)置index的屬性項(xiàng),有以下的屬性項(xiàng):
background, bg:背景色
foreground, fg:前景色
selectbackground:選中時(shí)的背景色
selectforeground:選中時(shí)的前景色
# 這與控件方法config()的區(qū)別這是指定項(xiàng)而不是控件
11.itemcget(index, option)
返回index的屬性項(xiàng)option的值
示例:
運(yùn)行結(jié)果:
(0, 2)
12.scan_mark(x, y)
13.scan_dragto(x, y)
見章節(jié)“拖曳與縮放功能”
14.selection_anchor(index)
# 別名:select_anchor
將選區(qū)錨點(diǎn)設(shè)置為index,如果index不存在則使用距離index最近的。選區(qū)錨點(diǎn)是用鼠標(biāo)拖拽選區(qū)時(shí)選區(qū)固定的末端
15.selection_clear(first, last=None)
# 別名:select_clear
取消選擇區(qū)間[first, last]之間的項(xiàng)
16.selection_includes(index)
# 別名:select_includes
如果index被選中則返回True,否則返回False
17.selection_set(first, last=None)
# 別名:select_set
選中區(qū)間[first, last]之間的項(xiàng)。不會(huì)影響范圍外的項(xiàng)的選擇狀態(tài)
18.size()
返回列表框內(nèi)項(xiàng)的數(shù)量
?
支持XView和YView
十五、滾動(dòng)條控件(Scrollbar)
(1)、概念
滾動(dòng)條控件常用于創(chuàng)建一個(gè)水平或垂直的滾動(dòng)條,主要用來控制控件區(qū)域的可見范圍
# 似乎是受操作系統(tǒng)的影響,實(shí)測全部改變外觀的屬性項(xiàng)(例如bg, bd等)以及一些屬性項(xiàng)無效
1.組成
1.1.滑塊/滾動(dòng)條拇指(slider/scroll thumb)
是一個(gè)凸起的矩形,表示當(dāng)前的滾動(dòng)位置
拖動(dòng)滑塊可以移動(dòng)視圖
1.2.箭頭按鈕(arrowheads)
位于滾動(dòng)條的兩端,用于微移滾動(dòng)位置。位于滾動(dòng)條左邊或上邊的箭頭按鈕稱為arrow1,右邊或下邊的箭頭按鈕稱為arrow2
點(diǎn)擊arrow1可以將視圖向左或上移動(dòng)一小段,點(diǎn)擊arrow2可以將視圖向右或下移動(dòng)一小段。不同控件移動(dòng)的距離不同
1.3.滾動(dòng)槽/滾動(dòng)條軌道(trough/scroll track)
是箭頭按鈕和滑塊的后面的凹陷部分。位于滾動(dòng)條左邊或上邊的滾動(dòng)槽稱為trough1,右邊或下邊的滾動(dòng)槽稱為trough2
點(diǎn)擊trough1可以將視圖向左或上移動(dòng)一頁,點(diǎn)擊trough2可以將視圖向右或下移動(dòng)一頁
2.滾動(dòng)位置
滾動(dòng)位置是閉區(qū)間[0.0, 1.0]中的一個(gè)數(shù)字,是滑塊的位置。0.0代表滑塊在頂部或左端;1.0代表滑塊在底部或右端
# 這個(gè)數(shù)字也就是是滑塊位置的百分?jǐn)?shù)
3.視圖位置
(左邊到達(dá)水平視圖的百分?jǐn)?shù), 右邊到達(dá)水平視圖的百分?jǐn)?shù))或是(上邊到達(dá)垂直視圖的百分?jǐn)?shù), 下邊到達(dá)垂直視圖的百分?jǐn)?shù))
4.為控件增加滾動(dòng)條
需要分別設(shè)置滾動(dòng)條控件的command屬性項(xiàng)和對(duì)應(yīng)控件的xscrollcommand或yscrollcommand方法
4.1.command
是當(dāng)滾動(dòng)條控件更新時(shí)的回調(diào)函數(shù),不同操作傳入值不同,通常是對(duì)應(yīng)控件的xview()或yview()方法。如果不指定,則用戶操作滾動(dòng)條時(shí),對(duì)應(yīng)控件不會(huì)改變視圖位置
4.2.xscrollcommand/yscrollcommand
是當(dāng)對(duì)應(yīng)控件視圖發(fā)生變化的回調(diào)函數(shù),傳入兩個(gè)位置實(shí)參(視圖位置),通常是滾動(dòng)條控件的set()方法。如果不指定,則當(dāng)對(duì)應(yīng)控件視圖發(fā)生變化時(shí),滑塊位置不會(huì)改變
(2)、演示圖


(3)、構(gòu)造方法
tkinter.Scrollbar(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
activebackground, activerelief, background, bd, bg, borderwidth, command, cursor, elementborderwidth, highlightbackground, highlightcolor, highlightthickness, jump, orient, relief, repeatdelay, repeatinterval, takefocus, troughcolor, width
1.command
更多信息見此章“(1)、4.1”,這里說明不同操作的傳入值:
當(dāng)用戶點(diǎn)擊arrow1:command(tk.SCROLL, -1, tk.UNITS)
當(dāng)用戶點(diǎn)擊arrow2:command(tk.SCROLL, 1, tk.UNITS)
當(dāng)用戶點(diǎn)擊trough1:command(tk.SCROLL, -1, tk.PAGES)
當(dāng)用戶點(diǎn)擊trough2:command(tk.SCROLL, 1, tk.PAGES)
當(dāng)用戶拖動(dòng)滑塊:command(tk.MOVETO, f) ?# f是滾動(dòng)位置
2.orient
當(dāng)值為'horizontal'時(shí)滾動(dòng)條是水平滾動(dòng)條,當(dāng)值為'vertical'(默認(rèn)值)時(shí)滾動(dòng)條是垂直滾動(dòng)條。值可以是它們的縮寫
# 以下屬性項(xiàng)實(shí)測在Windows7中實(shí)測無效
3.jump
當(dāng)值為0(默認(rèn)值)時(shí)滑塊每一小段拖動(dòng)都會(huì)調(diào)用command指定的回調(diào)函數(shù);當(dāng)值為1時(shí)直到用戶釋放鼠標(biāo)時(shí)才會(huì)調(diào)用command指定的回調(diào)函數(shù)
4.activerelief
當(dāng)鼠標(biāo)放在滑塊上時(shí)滑塊的邊框樣式,默認(rèn)值為'raised'
5.elementborderwidth
箭頭按鈕和滑塊的邊框?qū)挾?,默認(rèn)值為-1(使用borderwidth的值)
6.troughcolor
滾動(dòng)槽的顏色
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
# 實(shí)測無效的不會(huì)列出
cursor, takefocus:默認(rèn)值為空字符串
width:默認(rèn)值為17。注意如果是水平滾動(dòng)條,則是滾動(dòng)條的高度
(6)、方法
1.activate(index=None)
無參數(shù)調(diào)用返回'arrow1', 'arrow2', 'slider'或''中的其中一個(gè),取決于當(dāng)前的鼠標(biāo)位置。傳入index參數(shù)則突出顯示index(使用其activerelief和activebackground)
# 實(shí)測無效
2.delta(deltax, deltay)
返回一個(gè)浮點(diǎn)數(shù),代表滑塊滾動(dòng)位置的分?jǐn)?shù)加或減多少才能使滑塊向右/下移動(dòng)deltax/deltay像素
滾動(dòng)條控件是水平滾動(dòng)條時(shí)deltay將被忽略,是垂直滾動(dòng)條時(shí)deltax將被忽略
# deltax和deltay是整數(shù)
3.fraction(x, y)
返回閉區(qū)間[0.0, 1.0]之間的浮點(diǎn)數(shù),代表位于滾動(dòng)槽像素坐標(biāo)x, y或距離x, y最近一個(gè)點(diǎn)的滾動(dòng)位置
4.identify(x, y)
返回位于滾動(dòng)條控件像素坐標(biāo)x, y的組成名稱,無則返回空字符串。組成名稱包括'arrow1', 'arrow2', 'trough1', 'trough2', 'slider'
5.get()
返回當(dāng)前滑塊的位置(first, last),first, last都是滾動(dòng)位置。first代表當(dāng)前滑塊頂部或左端的位置,last代表當(dāng)前滑塊底部或右端的位置
6.set(first, last)
設(shè)置當(dāng)前滑塊的位置
first, last——見get()
示例:
運(yùn)行結(jié)果:
運(yùn)行時(shí):

從左到右,從上到下依次點(diǎn)擊每個(gè)按鈕后:
-0.09389671361502347
0.5570469798657718
trough2
(0.0, 0.1)

將水平滾動(dòng)條拖到最右側(cè)后點(diǎn)擊第3個(gè)按鈕:
trough1
十六、微調(diào)框控件(Spinbox)
(1)、概念
微調(diào)框控件是輸入控件的升級(jí)版,它允許用戶從一個(gè)給定的集合中選擇數(shù)值(集合是數(shù)字集或字符串集)或直接輸入數(shù)值,有一個(gè)顯示當(dāng)前值的區(qū)域和微調(diào)選擇器(一對(duì)上下箭頭)
(2)、演示圖

(3)、構(gòu)造方法
tkinter.Spinbox(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
ctivebackground, background, bd, bg, borderwidth, buttonbackground, buttoncursor, buttondownrelief, buttonuprelief, command, cursor, disabledbackground, disabledforeground, exportselection, fg, font, foreground, format, from, highlightbackground, highlightcolor, highlightthickness, increment, insertbackground, insertborderwidth, insertofftime, insertontime, insertwidth, invalidcommand, invcmd, justify, relief, readonlybackground, repeatdelay, repeatinterval, selectbackground, selectborderwidth, selectforeground, state, takefocus, textvariable, to, validate, validatecommand, values, vcmd, width, wrap, xscrollcommand
1.from, to
# 因?yàn)閒rom是Python的關(guān)鍵字,所以from有別名:from_
使用from和to屬性限制數(shù)值在閉區(qū)間[from, to]。默認(rèn)值都為0.0
# from和to可以是浮點(diǎn)數(shù),to的值必須大于from的值
2.increment
當(dāng)使用from和to屬性限制數(shù)值時(shí)用戶每次點(diǎn)擊箭頭數(shù)值增加或減少的多少(步長)。默認(rèn)值為1.0
3.format
當(dāng)使用from和to屬性限制數(shù)值時(shí)格式化數(shù)值,值格式:“%[寬度].[精度]f”
# 精度是小數(shù)點(diǎn)后幾位
# 精確后的數(shù)值如果和當(dāng)前數(shù)值一樣則繼續(xù)點(diǎn)擊箭頭不會(huì)使值增加
4.values
指定數(shù)值的字符串集,實(shí)測傳入用空格分隔數(shù)值的字符串,或數(shù)值作為元素的列表或元組都可以
# 實(shí)測優(yōu)先級(jí)比from, to高
5.wrap
如果為True,則當(dāng)數(shù)值到最大值時(shí)再次點(diǎn)擊箭頭會(huì)環(huán)繞到最低值,否則不會(huì)。默認(rèn)值為False
6.command
當(dāng)用戶點(diǎn)擊箭頭按鈕時(shí)的回調(diào)函數(shù)
7.buttonbackground
箭頭按鈕的背景色。默認(rèn)值由系統(tǒng)指定
8.buttoncursor
當(dāng)鼠標(biāo)移動(dòng)到箭頭按鈕上時(shí)的鼠標(biāo)樣式
9.buttonuprelief, buttondownrelief
分別是上、下箭頭的邊框樣式
# 實(shí)測無效
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
highlightbackground, highlightcolor, insertbackground, readonlybackground, selectbackground, selectforeground:默認(rèn)值由系統(tǒng)指定
invalidcommand, invcmd, takefocus, textvariable, validatecommand, vcmd, xscrollcommand:默認(rèn)值為空字符串
bd:默認(rèn)值為1
borderwidth:默認(rèn)值為1
cursor:默認(rèn)值為'xterm'
exportselection:默認(rèn)值為1
font:默認(rèn)值為'TkTextFont'
highlightthickness:默認(rèn)值為0
insertborderwidth:默認(rèn)值為0
insertofftime:默認(rèn)值為300
insertontime:默認(rèn)值為600
insertwidth:默認(rèn)值為2
justify:默認(rèn)值為'left'
relief:默認(rèn)值為'sunken'
repeatdelay:默認(rèn)值為400
repeatinterval:默認(rèn)值為100
selectborderwidth:默認(rèn)值為0
state:默認(rèn)值為'normal'
validate:默認(rèn)值為'none'
width:默認(rèn)值為20。注意單位是字符數(shù)
# 驗(yàn)證功能見輸入控件
(6)、方法
1.invoke(element)
如果箭頭按鈕element狀態(tài)不是disabled且command已指定,則調(diào)用command并返回結(jié)果
element——可以是'buttonup', 'buttondown'或'none'
# 注意這會(huì)使數(shù)值增加或減少
2.selection_element(element=None)
無參數(shù)調(diào)用將顯示當(dāng)前被按下的箭頭按鈕
element——值同invoke()。如果被指定則會(huì)使element顯示被按下
# 同時(shí)只有一個(gè)箭頭按鈕能顯示被按下
?
支持XView
其他方法見輸入控件
示例:
運(yùn)行結(jié)果:
十七、消息控件(Message)
(1)、概念
消息控件類似于標(biāo)簽控件,區(qū)別是它增加了自動(dòng)分行的功能。所有文本以相同字體顯示(不同字體見“文本框控件(Text)”)
# 將標(biāo)簽控件指定wraplength屬性項(xiàng)和justify屬性項(xiàng)也可達(dá)到近似相同的效果
(2)、演示圖

(3)、構(gòu)造方法
tkinter.Message(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
anchor, aspect, background, bd, bg, borderwidth, cursor, fg, font, foreground, highlightbackground, highlightcolor, highlightthickness, justify, padx, pady, relief, takefocus, text, textvariable, width
1.aspect
指定寬度比高度的百分比
# 例如如果值為100,則消息控件的寬度近似于高度;如果值為200,則消息控件的寬度是高度的二倍,如果值為50則反之
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
background, bg, fg, foreground, highlightbackground, highlightcolor:默認(rèn)值由系統(tǒng)指定
cursor, text, textvariable:默認(rèn)值為空字符串
anchor:默認(rèn)值為'center'
bd:默認(rèn)值為1
borderwidth:默認(rèn)值為1
font:默認(rèn)值為'TkDefaultFont'
highlightthickness:默認(rèn)值為0
justify:默認(rèn)值為'left'
padx:默認(rèn)值為-1
pady:默認(rèn)值為-1
relief:默認(rèn)值為'flat'
takefocus:默認(rèn)值為0
width:默認(rèn)值為0。注意單位是像素,且實(shí)測信息控件的大小會(huì)根據(jù)文本的大小而改變,但標(biāo)簽控件不會(huì)
示例:
運(yùn)行結(jié)果:

十八、文本框控件(Text)
(1)、概念
文本框控件用于顯示和編輯多行文本,允許用戶以不同的樣式、屬性來顯示和編輯文本。它可以包含純文本或格式化文本,同時(shí)支持嵌入圖片等
# 本章中“行”, “段”或“邏輯行”(logical lines)代表文本框控件中用回車換行的文本,而“行文本”或“顯示行”(display lines)代表顯示在文本框中一行之內(nèi)的文本。例如這個(gè)注釋是一段,有三行文本
(2)、演示圖

(3)、構(gòu)造方法
tkinter.Text(master=None, cnf={}, **kw)
(4)、屬性項(xiàng)
autoseparators, background, bd, bg, blockcursor, borderwidth, cursor, endline, exportselection, fg, font, foreground, height, highlightbackground, highlightcolor, highlightthickness, inactiveselectbackground, insertbackground, insertborderwidth, insertofftime, insertontime, insertunfocussed, insertwidth, maxundo, padx, pady, relief, selectbackground, selectborderwidth, selectforeground, setgrid, spacing1, spacing2, spacing3, startline, state, tabs, tabstyle, takefocus, undo, width, wrap, xscrollcommand, yscrollcommand
1.blockcursor
是一個(gè)布爾值,指定插入光標(biāo)是否繪制成一個(gè)字符大小的矩形方塊。默認(rèn)值為False,即一條細(xì)的垂直線
# 這個(gè)矩形方塊外觀相當(dāng)于cmd中點(diǎn)擊Insert后的光標(biāo)外觀
2.inactiveselectbackground
當(dāng)窗口沒有焦點(diǎn)時(shí)選定區(qū)的顏色。如果為空則窗口沒有焦點(diǎn)不顯示選定區(qū)
# 選定區(qū)是選定文本的區(qū)域
3.insertunfocussed
指定當(dāng)控件沒有焦點(diǎn)時(shí)插入光標(biāo)的樣式。'none'(默認(rèn))代表不顯示光標(biāo),'hollow'代表空心方塊,'solid'代表實(shí)心方塊
當(dāng)blockcursor為False時(shí),'hollow'與'solid'基本沒區(qū)別
示例:
blockcursor為True:

inactiveselectbackground為'red'失去焦點(diǎn)時(shí):

blockcursor為True,insertunfocussed為'hollow'失去焦點(diǎn)時(shí):

4.startline, endline
都是一個(gè)整數(shù)的行索引,代表底層文本數(shù)據(jù)存儲(chǔ)的行。startline代表儲(chǔ)存的第一行,endline代表儲(chǔ)存的內(nèi)容最后一行的之后一行。指定空字符串可以重置它們一開始代表的行
設(shè)置startline和endline可以顯示文本框較大文本中的一部分
示例:

指定startline=5, endline=8后:

指定startline='', endline=''后:

5.wrap
指定如果處理過寬的行文本。'none'代表每行文本正好顯示為一段,'char'(默認(rèn))代表過長的每行文本會(huì)在任意字符斷開,'word'代表過長的每行文本會(huì)在適合的最后一個(gè)單詞斷開
# “一個(gè)單詞”是指任何數(shù)量相鄰字母、數(shù)字或下劃線組成的字符串
示例:
'none':

'char':

'word':

6.spacing1
指定每行文本上方的空白間隔(段前間距)。默認(rèn)值為0
7.spacing2
指定每行文本自動(dòng)換行的各行之間的空白間隔。默認(rèn)值為0
8.spacing3
指定每行文本下方的空白間隔(段后間距)。默認(rèn)值為0
9.undo
是否啟用撤銷功能,默認(rèn)值為False
# 實(shí)際上也是是否啟用重做功能
10.maxundo
允許撤銷的數(shù)量,值為-1代表無限次
11.autoseparators
指定在撤銷功能啟用后,是否自動(dòng)插入撤銷分隔符(分隔操作記錄)
# 撤銷/重做機(jī)制的概述見后文“撤銷/重做機(jī)制”
12.tabs
設(shè)置Tab之間的停頓
默認(rèn)一個(gè)Tab是八個(gè)字符
設(shè)置特定的Tab,則要將該屬性項(xiàng)值設(shè)置為一個(gè)序列,序列中的元素是相對(duì)于控件左邊緣的距離(不包括邊框)
序列中的元素應(yīng)是正數(shù)且是遞增的
元素后面可以跟一個(gè)字符串,代表Tab后文本的對(duì)齊方式:
'left'(默認(rèn)):Tab后的文本左邊緣與Tab位置對(duì)齊
'right':Tab后的文本右邊緣與Tab位置對(duì)齊
'center':Tab后的文本在Tab位置的中間
'numeric':Tab后的文本如果有小數(shù)點(diǎn),則最右端的小數(shù)點(diǎn)與Tab位置對(duì)齊;如果沒有小數(shù)點(diǎn),最左端數(shù)字的最小位右邊緣與Tab位置對(duì)齊;如果沒有數(shù)字,則文本右邊緣與Tab位置對(duì)齊
?
如果序列沒有足夠的元素則會(huì)使用最后元素的間隔和對(duì)齊方式推斷后面的Tab
如果屬性項(xiàng)沒有指定或序列為空,則使用默認(rèn)值
補(bǔ)充:使用tkinter.font模塊Font類的measure方法乘以4,可以設(shè)置Tab是4個(gè)字符
13.tabstyle
指定一行中Tab停頓與該行文本中Tab的關(guān)系,可以是以下值:
'tabular':一行文本中每個(gè)Tab字符與每個(gè)Tab停頓互相關(guān)聯(lián)。如果Tab字符處于Tab停頓的右邊,則會(huì)插入一個(gè)空格
'wordprocessor':一行文本中每個(gè)Tab字符與右邊的第一個(gè)Tab停頓相關(guān)聯(lián)
示例1:
默認(rèn)停頓:

tabs=('1c', '3c', '7c'):

tabs=('1c', '3c', RIGHT, '7c'):??# three移動(dòng)到Tab的左邊

tabs=('1c', '3c', NUMERIC, '7c'):??# '.'移動(dòng)到Tab位置

示例2:
tabstyle=('tabular'):

tabstyle=('wordprocessor'):

# 當(dāng)為'tabular'時(shí),第三組超過Tab停頓插入一個(gè)空格;當(dāng)為'wordprocessor'時(shí),第三組超過Tab停頓移到右邊下一個(gè)Tab停頓
(5)、屬性項(xiàng)的默認(rèn)值及注意事項(xiàng)
background, bg, fg, foreground, highlightbackground, highlightcolor, insertbackground, selectbackground, selectforeground:默認(rèn)值由系統(tǒng)指定
takefocus, xscrollcommand, yscrollcommand:默認(rèn)值為空字符串
bd:默認(rèn)值為1
borderwidth:默認(rèn)值為1
cursor:默認(rèn)值為'xterm'
exportselection:默認(rèn)值為1
font:默認(rèn)值為'TkFixedFont'
height:默認(rèn)值為24
highlightthickness:默認(rèn)值為0
insertborderwidth:默認(rèn)值為0
insertofftime:默認(rèn)值為300
insertontime:默認(rèn)值為600
insertwidth:默認(rèn)值為2
padx:默認(rèn)值為1
pady:默認(rèn)值為1
relief:默認(rèn)值為'sunken'
selectborderwidth:默認(rèn)值為0
state:默認(rèn)值為'normal'
width:默認(rèn)值為80
(6)、索引
使用索引指定字符在文本框中的位置
# 除非指定display,否則索引只對(duì)應(yīng)當(dāng)前顯示的字符,不會(huì)對(duì)應(yīng)被省略隱藏的字符
1.格式
"base modifier modifier modifier ..."
# 空格不是必要的
2.base
索引的開始,可以是以下形式
2.1.line.char
對(duì)應(yīng)line行中的第char個(gè)字符。line從1開始,char從0開始
如果char為'end',則是line行結(jié)束處的換行符
2.2.@x,y
對(duì)應(yīng)文本框X和Y坐標(biāo)的字符
2.3.end
對(duì)應(yīng)文本框結(jié)束的字符(最后一個(gè)換行符之后的一個(gè)字符)
# 標(biāo)記mark和標(biāo)簽tag見后文
2.4.mark
對(duì)應(yīng)標(biāo)記名為mark的字符
2.5.tag.first
對(duì)應(yīng)文本框控件中第一個(gè)標(biāo)簽為tag的字符
2.6.tag.last
對(duì)應(yīng)文本框控件中最后一個(gè)標(biāo)簽為tag的字符
2.7.嵌入對(duì)象
對(duì)應(yīng)嵌入到文本框控件中的圖像或控件
3.modifier
通過modifier修飾索引,可以是以下形式
# 空格不是必要的(除了字母之間的空格),[]中代表可選,/表示多選1,modifier中的字符串可以縮寫
3.1.+/- count [display/any] chars
將索引按字符向后/前移動(dòng),count指定移動(dòng)的字符數(shù)
如果指定display,則被省略的字符會(huì)被跳過而不被計(jì)算在內(nèi);如果指定any,則任何字符都會(huì)被計(jì)算在內(nèi)(但圖像和控件不會(huì));否則是以索引位置進(jìn)行計(jì)算
# 由于歷史原因,需要指定any才是按字符移動(dòng)
3.2.+/- count [display/any] indices
將索引按索引位置向后/前移動(dòng),count指定移動(dòng)的字符數(shù)
如果指定display,則被省略的索引會(huì)被跳過而不被計(jì)算在內(nèi);如果指定any(默認(rèn)),則任何索引都會(huì)被計(jì)算在內(nèi)
3.3.+/- count [display/any] lines
將索引按行向后/前移動(dòng),count指定移動(dòng)的行數(shù)
如果指定display,則顯示行會(huì)被計(jì)算在內(nèi);如果指定any(默認(rèn)),則每個(gè)邏輯行只會(huì)被計(jì)算一次
3.4.[display] linestart
將索引調(diào)整為該行第一個(gè)索引
如果指定display,則是顯示行第一個(gè)索引,否則是邏輯行第一個(gè)索引
3.5.[display] lineend
將索引調(diào)整為該行最后一個(gè)索引
如果指定display,則是顯示行最后一個(gè)索引,否則是邏輯行最后一個(gè)索引
3.6.[display] wordstart
將索引調(diào)整為當(dāng)前索引所在單詞的第一個(gè)字符
如果指定display,則被省略的字符會(huì)被跳過而不被計(jì)算在內(nèi),否則任何字符都會(huì)被計(jì)算在內(nèi)
3.7.[display] wordend
將索引調(diào)整為當(dāng)前索引所在單詞的最后一個(gè)文本之后的字符
如果指定display,則被省略的字符會(huì)被跳過而不被計(jì)算在內(nèi),否則任何字符都會(huì)被計(jì)算在內(nèi)
示例:
文本:
01234567890123456789012345678901234567890123456789
0123456789
abc def ghij
0123456789
0123456789
0123456789
屬性項(xiàng):
font=('黑體', 20), width=35, height=8
結(jié)果圖:

索引:??# “-->”后的是對(duì)應(yīng)字符和“l(fā)ine.char”索引
1.2 --> '2' (1.2)
2.2 --> '2' (2.2) ?# 結(jié)果圖中的第二邏輯行是第三顯示行
end --> '' (7.0)
1.2 + 3 any chars --> '5' (1.5) ?# 可縮寫為'1.2+3a c'
1.2 + 3 any line --> '2' (4.2)
1.2 + 3 display line --> 'c' (3.2) ?# 第一邏輯行的第二顯示行計(jì)算在內(nèi)
1.0 display lineend --> '4' (1.34)
3.8 wordend --> '\n' (3.12) ?# 最后一個(gè)文本之后的字符是換行符
(7)、基本方法
1.bbox(index)
返回元組(x, y, width, height)描述索引index對(duì)應(yīng)字符的矩形邊界
如果字符在屏幕上不可見則width, height為0
2.compare(index1, op, index2)
比較index1和index2的索引位置,返回布爾值
op——關(guān)系運(yùn)算符,值是'<', '<=', '==' '>=', '>', '!='中的一個(gè)
如果index1和index2對(duì)應(yīng)文本同一字符,則它們是相等的;如果index1對(duì)應(yīng)的字符在index2對(duì)應(yīng)的字符之前,則index1 < index2
3.delete(index1, index2=None)
刪除區(qū)間[index1, index2)之間的字符。如果只給出index1,則只刪除index1對(duì)應(yīng)的字符;如果index1 > index2,則不會(huì)刪除任何字符
4.get(index1, index2=None)
返回區(qū)間[index1, index2)之間的字符。如果只給出index1,則只返回index1對(duì)應(yīng)的字符;如果index1 > index2,則不會(huì)返回任何字符
嵌入對(duì)象將被忽略,多行文本會(huì)用'\n'分隔
5.index(index)
返回index索引對(duì)應(yīng)的'line.char'形式
6.insert(index, chars, *args)
在index處插入文本chars。如果提供額外參數(shù),則第一個(gè)參數(shù)視為標(biāo)簽添加到chars上(如果是可迭代對(duì)象則是每個(gè)元素(字符串除外)),后面可以再加多組這樣的chars-tags對(duì)
示例:
insert(1.0, 'aaaa', ['tag_a', 'tag_b'], 'bbbb', 'tag_b')意為在1.0處插入aaaabbbb,其中aaaa被添加tag_a和tag_b索引,bbbb被添加tag_b索引
7.see(index)
滾動(dòng)視圖使index可見
(8)、標(biāo)記
·?標(biāo)記是文本框中的某個(gè)浮動(dòng)的位置,處于兩個(gè)字符之間,它會(huì)與相鄰的文本浮動(dòng)
·?刪除標(biāo)記周圍文本不會(huì)刪除標(biāo)記
·?實(shí)測標(biāo)記名可以是任何字符串,但建議最好不要與像'end', '1.0'之類的索引重名
·?特殊標(biāo)記'insert'是插入光標(biāo)的位置,'current'是最接近鼠標(biāo)指針的位置
1.標(biāo)記重力
標(biāo)記是處于兩個(gè)字符之間的位置,標(biāo)記重力指定當(dāng)文本插入到標(biāo)記位置時(shí)標(biāo)記附著的字符,它的方向是'left'或'right'
2.標(biāo)記相關(guān)方法
2.1.mark_gravity(markName, direction=None)
只傳入markName參數(shù)則返回對(duì)應(yīng)標(biāo)記的重力方向
如果傳入direction,則它需是'left'或'right',用于改變標(biāo)記的“重力”方向
2.2.mark_set(markName, index)
如果名為markName的標(biāo)記不存在,則以'right'的重力創(chuàng)建一個(gè)標(biāo)記,并移動(dòng)到index位置
如果存在,則將名為markName的標(biāo)記移動(dòng)到index位置
2.3.mark_unset(*markNames)
刪除markNames中的所有標(biāo)記
# 特殊標(biāo)記'insert'和'current'不能被刪除
2.4.mark_names()
返回控件中所有標(biāo)記名組成的元組,包括'insert'和'current'
2.5.mark_next(index)
返回索引index后面的標(biāo)記名稱,實(shí)測無標(biāo)記返回None
如果index是一個(gè)標(biāo)記名,則是該標(biāo)記的名之后的一個(gè)標(biāo)記
2.6.mark_previous(index)
返回索引index前面的標(biāo)記名稱,實(shí)測無標(biāo)記返回None
如果index是一個(gè)標(biāo)記名,則是該標(biāo)記的名之前的一個(gè)標(biāo)記
(9)、標(biāo)簽
·?標(biāo)簽是字符串,可以包含任何字符,但最好避免是'end', '1.0'之類的名稱
·?一個(gè)標(biāo)簽可以與任何數(shù)量的字符相關(guān)聯(lián),一個(gè)字符也可以與任何數(shù)量的標(biāo)簽相關(guān)聯(lián)
·?標(biāo)簽?zāi)芸刂葡嚓P(guān)聯(lián)字符的外觀和功能
·?標(biāo)簽之間有一個(gè)優(yōu)先順序,擁有更高優(yōu)先順序的標(biāo)簽,它所對(duì)應(yīng)的屬性項(xiàng)優(yōu)先應(yīng)用
·?特殊標(biāo)簽'sel',代表當(dāng)前選定區(qū)的文本
1.標(biāo)簽相關(guān)方法
1.1.tag_add(tagName, index1, *args)
將標(biāo)簽tagName與區(qū)間[index1, args中第一個(gè)位置參數(shù))相關(guān)聯(lián),后面可以再加多組這樣的位置參數(shù)。如果最后一組這樣的參數(shù)不成對(duì),則關(guān)聯(lián)最后一組前面參數(shù)的單個(gè)字符
1.2.tag_remove(tagName, index1, index2=None)
將標(biāo)簽tagName從區(qū)間[index1, index2)中刪除。如果只給出index1,則只刪除index1對(duì)應(yīng)的單個(gè)字符
1.3.tag_delete(*tagNames)
刪除tagNames中的所有標(biāo)簽
1.4.tag_names(index=None)
返回index對(duì)應(yīng)字符關(guān)聯(lián)的所有標(biāo)簽名組成的元組。無參數(shù)調(diào)用返回文本框控件中的所有標(biāo)簽(包括特殊標(biāo)簽'sel')
1.5.tag_configure(tagName, cnf=None, **kw)
# 別名:tag_config
與控件的configure()相似,這里是修改標(biāo)簽TagName的屬性項(xiàng)
1.6.tag_cget(tagName, option)
以字符串形式返回標(biāo)簽的屬性項(xiàng)option的值
1.7.tag_raise(tagName, aboveThis=None)
將標(biāo)簽tagName的優(yōu)先順序升到標(biāo)簽aboveThis的上面
省略aboveThis則將其優(yōu)先順序升到最高
1.8.tag_lower(tagName, belowThis=None)
將標(biāo)簽tagName的優(yōu)先順序降到標(biāo)簽aboveThis的下面
省略aboveThis則將其優(yōu)先順序降到最低
1.9.tag_ranges(tagName)
以元組形式返回描述tagName相關(guān)聯(lián)字符的范圍
元組中每兩個(gè)元素描述一個(gè)范圍區(qū)間[arg1, arg2)
1.10.tag_nextrange(tagName, index1, index2=None)
在區(qū)間[index1, index2)中從左向右搜索第一個(gè)標(biāo)簽tagName關(guān)聯(lián)字符范圍的初始索引,以元組形式返回此初始索引對(duì)應(yīng)的范圍
如果省略index2,則index2默認(rèn)是文本框末尾;如果搜索無結(jié)果則返回空元組
# 范圍的“初始索引”指范圍區(qū)間[arg1, arg2)中的arg1
1.11.tag_prevrange(tagName, index1, index2=None)
在區(qū)間[index2, index1)中從右向左搜索第一個(gè)標(biāo)簽tagName關(guān)聯(lián)字符范圍的初始索引,以元組形式返回此初始索引對(duì)應(yīng)的范圍
如果省略index2,則index2默認(rèn)是文本框開頭;如果搜索無結(jié)果則返回空元組
示例:
文本框內(nèi)容:012345678901234567890123456789
調(diào)用控件方法:
tag_add('my_tag', '1.1', '1.5', '1.8', '1.9', '1.12', '1.15') ?# 將'my_tag'標(biāo)簽關(guān)聯(lián)到后面范圍
tag_config('my_tag', background='green') ?# 將'my_tag'標(biāo)簽關(guān)聯(lián)字符的背景色變?yōu)榫G色
當(dāng)前結(jié)果:

調(diào)用控件方法:
tag_nextrange('my_tag', '1.2', '1.13') --> ('1.8', '1.9')
tag_prevrange('my_tag', '1.13', '1.2') --> ('1.12', '1.15')
# 從'1.2'到'1.13',('1.8', '1.9')中初始索引'1.8'是第一個(gè)被包含的;從'1.13'到'1.2',('1.12', '1.15')中初始索引'1.12'是一個(gè)被包含的
1.12.tag_bind(tagName, sequence, func, add=None)
同控件方法bind()
# 更多信息見章節(jié)“事件處理”
1.13.tag_unbind(tagName, sequence, funcid=None)
同控件方法unbind()
# 更多信息見章節(jié)“事件處理”
2.標(biāo)簽屬性項(xiàng)
使用tag_config()修改標(biāo)簽的屬性項(xiàng)可以改變相關(guān)聯(lián)文本的外觀
2.1.background
指定背景色
2.2.foreground
指定前景色
2.3.bgstipple
指定背景填充的位圖,空字符串(默認(rèn)值)表示實(shí)心
2.4.fgstipple
指定前景填充的位圖,空字符串(默認(rèn)值)表示實(shí)心
2.5.borderwidth
指定邊框?qū)挾?/span>
2.6.relief
指定邊框樣式
2.7.elide
是否被省略。省略的數(shù)據(jù)(字符、圖像、嵌入控件)不會(huì)顯示,但進(jìn)一步的行為和正常數(shù)據(jù)一樣
2.8.font
指定字體
2.9.justify
指定多行文本的對(duì)齊方式。值為'left'(默認(rèn)值), 'center', 'right'(或它們的縮寫)
# 顯示行的對(duì)齊方式由第一個(gè)非省略字符的此屬性值決定
2.10.lmargin1
指定首行縮進(jìn)的像素
2.11.lmargin2
指定后續(xù)行縮進(jìn)的像素
2.12.lmargincolor
指定縮進(jìn)的背景色
2.13.rmargin
指定文本右縮進(jìn)的像素
2.14.rmargincolor
指定文本右縮進(jìn)的背景色
2.15.offset
指定文本的基線與所在行的基線在垂直方向上的偏移量,單位是像素。偏移量為正則是向上偏移,為負(fù)則上向下偏移
# 使用此屬性可以做出上標(biāo)和下標(biāo)
示例:
文本內(nèi)容:H2SO4 + 2NaOH = Na2SO4 + 2H2O
調(diào)用控件方法:
tag_add('subscript', '1.1', '1.2', '1.4', '1.5', '1.18', '1.19', '1.21', '1.22', '1.27', '1.28')
tag_config('subscript', offset=-5)
當(dāng)前結(jié)果:

2.16.underline
指定是否繪制下劃線
2.17.underlinefg
指定下劃線的顏色
2.18.overstrike
指定是否繪制刪除線
2.19.overstrikefg
指定刪除線的顏色
2.20.selectbackground
指定選定區(qū)的背景色
2.21.selectforeground
指定選定區(qū)的前景色
2.22.wrap
2.23.spacing1
2.24.spacing2
2.25.spacing3
2.26.tabs
2.27.tabstyle
見文本框控件中的同名屬性項(xiàng)
(10)、嵌入對(duì)象
通過以下控件方法,可以在文本框中嵌入圖像、控件,圖像和控件都具有屬性項(xiàng)
1.嵌入圖像
1.1.相關(guān)方法
1.1.1.image_create(index, cnf={}, **kw)
在index處嵌入圖像,傳入鍵值對(duì)設(shè)置圖像的屬性項(xiàng),返回一個(gè)唯一的標(biāo)識(shí)符(用作索引)
1.1.2.image_configure(index, cnf=None, **kw)
與控件的configure()相似,這里是修改index對(duì)應(yīng)圖像的屬性項(xiàng)
1.1.3.image_cget(index, option)
以字符串形式返回index對(duì)應(yīng)圖像的屬性項(xiàng)option的值
1.1.4.image_names()
返回當(dāng)前文本框中嵌入圖像名稱組成的元組
1.2.屬性項(xiàng)
1.2.1.align
指定圖像在行中的顯示位置,可選擇以下的值:
'top':圖像頂部與行的頂部對(duì)齊
'center':圖像在行內(nèi)居中
'bottom':圖像底部與行的底部對(duì)齊
'baseline':圖像底部與行的基線對(duì)齊
示例: ?# 藍(lán)色矩形高度小于行高

1.2.2.image
指定圖像對(duì)象
1.2.3.name
指定嵌入圖像的標(biāo)識(shí)符名(重復(fù)標(biāo)識(shí)符會(huì)將#nn附加到后面)
1.2.4.padx
指定水平外邊距(嵌入對(duì)象周圍的空白區(qū)域),單位是像素
1.2.5.pady
指定垂直外邊距,單位是像素
2.嵌入控件
# 注意,如果嵌入控件的堆疊順序在文本框控件之下,則不會(huì)顯示
# 注意,一個(gè)控件同時(shí)只能在一個(gè)控件中被包裝,如果想要一次創(chuàng)建多個(gè)控件建議使用create屬性項(xiàng)
2.1.相關(guān)方法
2.1.1.window_create(index, cnf={}, **kw)
在index處嵌入控件,傳入鍵值對(duì)設(shè)置控件的屬性項(xiàng),返回None
2.1.2.window_configure(index, cnf=None, **kw)
# 別名:window_config
與控件的configure()相似,這里是修改index對(duì)應(yīng)控件的屬性項(xiàng)
2.1.3.window_cget(index, option)
以字符串形式返回index對(duì)應(yīng)控件的屬性項(xiàng)option的值
2.1.4.window_names()
返回當(dāng)前文本框中嵌入控件名稱組成的元組
2.2.屬性項(xiàng)
2.2.1.create
指定一個(gè)函數(shù),函數(shù)的返回值將作為嵌入到文本框的控件
2.2.2.stretch
指定一個(gè)布爾值,表示控件是否被垂直拉伸以填充其行
# 這會(huì)使align屬性被忽略。pady屬性仍會(huì)起作用
2.2.3.window
指定控件對(duì)象
2.2.4.align
2.2.5.padx
2.2.6.pady
見嵌入圖像中的同名屬性項(xiàng)
(11)、撤銷/重做機(jī)制與修改標(biāo)志
1.撤銷/重做機(jī)制
# 實(shí)測撤銷/重做機(jī)制對(duì)嵌入對(duì)象無作用
文本框控件有一個(gè)無限制的撤銷和重做機(jī)制,可以取消或恢復(fù)對(duì)控件內(nèi)文本的編輯
下面是撤銷/重做堆棧的工作方式:
·?對(duì)控件內(nèi)文本的編輯動(dòng)作(插入、刪除)都會(huì)堆到撤銷堆棧上
·?分隔符插入到編輯動(dòng)作之間。分隔符可以自動(dòng)插入(autoseparators為True),也可以手動(dòng)插入(控件方法edit_separator())
·?撤銷操作會(huì)反轉(zhuǎn)所有堆到撤銷/重做堆棧的編輯動(dòng)作,直到達(dá)到一個(gè)分隔符或堆棧內(nèi)容用完
·?撤銷操作的反轉(zhuǎn)操作會(huì)插入重做堆棧
·?每當(dāng)有新的編輯動(dòng)作記錄在撤銷堆棧時(shí),重做堆棧會(huì)被清空
2.修改標(biāo)志
·?通過文本框控件的修改標(biāo)志可以追蹤其內(nèi)容變化
·?修改標(biāo)志會(huì)在文本框內(nèi)文本插入、刪除、撤銷操作、重做操作時(shí)被設(shè)置為1,表示文本內(nèi)容被修改
·?修改標(biāo)志可以使用edit_modified()方法查詢、修改
3.相關(guān)方法
3.1.edit(*args)
文本內(nèi)容編輯相關(guān)的方法,第一個(gè)參數(shù)指定模式(見下面的方法名),后面參數(shù)是對(duì)應(yīng)方法的參數(shù)
# 模式還可以是'canundo'和'canredo',會(huì)返回撤銷/重做堆棧是否不為空
3.2.edit_modified(arg=None)
無參數(shù)調(diào)用返回文本框控件修改標(biāo)志的值。如果傳入布爾值arg,則將文本框控件修改標(biāo)志的值設(shè)置為arg
3.3.edit_undo()
執(zhí)行一次撤銷操作,當(dāng)撤銷堆棧為空時(shí)拋出TclError。只當(dāng)undo屬性為True時(shí)才起作用
3.4.edit_redo()
執(zhí)行一次重做操作,當(dāng)重做堆棧為空時(shí)拋出TclError。只當(dāng)undo屬性為True時(shí)才起作用
3.5.edit_separator()
向撤銷堆棧插入一個(gè)分隔符。只當(dāng)undo屬性為True時(shí)才起作用
3.6.edit_reset()
清空撤銷和重做堆棧
(12)、對(duì)等文本框控件(Peer text widgets)
# “對(duì)等文本框控件”為自譯
1.概念
多個(gè)文本框控件,有相同的基礎(chǔ)數(shù)據(jù)(文本、圖像、標(biāo)記、標(biāo)簽、...)但有著不同屬性項(xiàng),這樣的文本框控件稱為對(duì)等文本框控件(Peer text widgets)
2.特點(diǎn)
·?對(duì)等文本框控件基礎(chǔ)數(shù)據(jù)共享,但'sel'標(biāo)簽、'insert'標(biāo)記、'current'標(biāo)記、嵌入式控件不是共享的
·?對(duì)等文本框控件可以設(shè)置不同屬性項(xiàng),但undo, maxundo, autoseparators除外
·?對(duì)等文本框控件通過設(shè)置startline和endline可以只顯示某些行
·?對(duì)等文本框控件的“原始”文本框控件被刪除后,不會(huì)影響其他對(duì)等控件
3.相關(guān)方法
3.1.peer_create(newPathName, cnf={}, **kw)
創(chuàng)建調(diào)用文本框控件的對(duì)等文本框控件,傳入鍵值對(duì)設(shè)置不同的屬性項(xiàng)
調(diào)用后,新控件的路徑名稱將是newPathName
newPathName必須不存在,否則拋出TclError異常
# 對(duì)等控件和“原始”控件的startline和endline屬性默認(rèn)相同
# 創(chuàng)建對(duì)等文本框控件,可以先創(chuàng)建一個(gè)控件,再調(diào)用它的destroy()銷毀它,然后用此方法將它替換成對(duì)等文本框控件
3.2.peer_names()
返回調(diào)用文本框控件的對(duì)等文本框控件元組(不包括自己)
示例:
運(yùn)行結(jié)果:

隨便修改一個(gè)文本框內(nèi)容后:

(13)、更多方法
1.count(index1, index2, *args)
計(jì)算并以元組形式返回index1和index2之間(不包括index2)由args給出的每個(gè)計(jì)數(shù)項(xiàng)的數(shù)量。如果index1在index2之后,則計(jì)數(shù)結(jié)果是負(fù)數(shù)
計(jì)數(shù)項(xiàng)如下:
'indices'(默認(rèn)):計(jì)算所有的字符和嵌入對(duì)象
'displayindices':計(jì)算所有的非省略字符和嵌入對(duì)象
'chars':計(jì)算所有的字符
'displaychars':計(jì)算所有的非省略字符
'lines':計(jì)算所有的邏輯行,不包括index2所在的行
'displaylines':計(jì)算所有的顯示行,不包括index2所在的行
'xpixels':計(jì)算index1到index2之間水平字符(不包括index2)最左邊像素到最右邊像素的水平像素?cái)?shù)量
'ypixels':計(jì)算index1到index2之間垂直字符(不包括index2)最上邊像素到最下邊像素的水平像素?cái)?shù)量
# 實(shí)測'xpixels'和'ypixels'需要先更新控件才能正常計(jì)數(shù)
示例:
運(yùn)行結(jié)果: ?# 圖片沒有縮放,但在插入圖片時(shí)可能會(huì)模糊
?

2.dlineinfo(index)
返回一個(gè)五元組,該元組描述索引index所在顯示行的矩形區(qū)域。前兩個(gè)元素是這個(gè)矩形的左上角x和y坐標(biāo),三、四元素是該矩形的寬度和高度,第五個(gè)元素是從矩形上到下的基線位置。單位都是像素
如果索引index所有的顯示上在屏幕上不可見,則返回None
3.dump(index1, index2=None, command=None, **kw)
返回區(qū)間[index1, index2)中內(nèi)容組成的三元組列表。如果只給出index1,則只是index1對(duì)應(yīng)內(nèi)容組成的三元組列表
內(nèi)容包括:文本、標(biāo)記、標(biāo)簽、圖像、控件
通過關(guān)鍵字參數(shù),如果指定'all', 'image', 'mark', 'tag', 'text'或'window'中一個(gè)多個(gè)為真,則返回相應(yīng)內(nèi)容。沒有指定則默認(rèn)使用'all'
返回結(jié)果是一個(gè)三元組列表,三元組形為(key, value, index),分別是類型、值、索引。這個(gè)三元組列表是按照內(nèi)容順序的。類型tagon表示標(biāo)簽范圍開始、類型tagoff表示標(biāo)簽范圍結(jié)束
command——是一個(gè)函數(shù)。如果給出,則三元組列表的每個(gè)三元組都會(huì)傳入三個(gè)位置參數(shù)調(diào)用該函數(shù),且返回值變?yōu)镹one
示例:
運(yùn)行結(jié)果:
[('tagon', 'red', '1.0'), ('text', '012', '1.0'), ('tagoff', 'red', '1.3'), ('text', '3456789', '1.3')]
[('tagon', 'red', '1.0'), ('tagoff', 'red', '1.3'), ('tagon', 'red', '2.3'), ('tagoff', 'red', '2.6'), ('tagon', 'red', '3.6'), ('tagoff', 'red', '3.9')]
在索引2.0處讀取內(nèi)容012,類型:text
在索引2.3處讀取內(nèi)容red,類型:tagon
在索引2.3處讀取內(nèi)容345,類型:text
在索引2.6處讀取內(nèi)容red,類型:tagoff
在索引2.6處讀取內(nèi)容6789,類型:text

4.search(pattern, index, stopindex=None, forwards=None, backwards=None, exact=None, regexp=None, nocase=None, count=None, elide=None)
從index開始查找符合pattern的文本,默認(rèn)返回匹配文本的第一個(gè)字符的索引
指定以下參數(shù)值為True來控制查找:
forwards(默認(rèn)):從index(包含)開始從左向右查找
backwards:從index(不包含)開始從右向左查找
# 由于各種原因,backwards會(huì)比forwards慢得多
exact(默認(rèn)):匹配文本必須與pattern的文本相同
regexp:將pattern視為正則表達(dá)式
nocase:忽略大小寫
elide:查找省略的字符
count——指定一個(gè)控制變量,將匹配文本的字符數(shù)存儲(chǔ)到該控制變量中。指定會(huì)方法返回空字符串
stopindex——指定查找停止的索引。如果是forwards則不包含,如果是backwards則包含
5.replace(index1, index2, chars, *args)
將區(qū)間[index1, index)之間的文本替換成chars。關(guān)于args參見insert()方法
?
支持XView和YView
補(bǔ)充:tkinter包內(nèi)模塊scrolledtext
這個(gè)模塊提供一個(gè)名為ScrolledText的類,這個(gè)類繼承自Text類,但是多了一個(gè)y方向的滾動(dòng)條
tkinter.scrolledtext.ScrolledText(master=None, **kw)
這個(gè)類的對(duì)象的frame屬性是文本框控件和滾動(dòng)條控件布局在其內(nèi)的框架控件,vbar屬性是滾動(dòng)條控件