掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流
源代碼: Lib/tkinter/ttk.py

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的高郵網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
The tkinter.ttk module provides access to the Tk themed widget set, introduced in Tk 8.5. It provides additional benefits including anti-aliased font rendering under X11 and window transparency (requiring a composition window manager on X11).
tkinter.ttk 的基本設(shè)計(jì)思路,就是盡可能地把控件的行為代碼與實(shí)現(xiàn)其外觀的代碼分離開(kāi)來(lái)。
參見(jiàn)
Tk 控件風(fēng)格
介紹 Tk 風(fēng)格的文檔
使用 ttk 之前,首先要導(dǎo)入模塊:
from tkinter import ttk
為了覆蓋基礎(chǔ)的 Tk 控件,應(yīng)該在 Tk 之后進(jìn)行導(dǎo)入:
from tkinter import *from tkinter.ttk import *
這段代碼會(huì)讓以下幾個(gè) tkinter. ttk 控件(Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale 和 Scrollbar)自動(dòng)替換掉 Tk 的對(duì)應(yīng)控件。
使用新控件的直接好處,是擁有更好的跨平臺(tái)的外觀,但新舊控件并不完全兼容。主要區(qū)別在于,Ttk 組件不再包含“fg”、“bg”等與樣式相關(guān)的屬性 。而是用 ttk.Style 類(lèi)來(lái)定義更美觀的樣式效果。
參見(jiàn)
Converting existing applications to use Tile widgets
此文介紹遷移為新控件時(shí)的常見(jiàn)差別(使用 Tcl )。
ttk 中有 18 種部件 ,其中 12 種在 tkinter 中已包含了: Button 、 Checkbutton 、Entry 、 Frame 、 Label, LabelFrame 、 Menubutton 、PanedWindow 、Radiobutton 、 Scale 、 Scrollbar 和 Spinbox。另有 6 種是新增的: Combobox 、 Notebook 、 Progressbar 、 Separator 、 Sizegrip 和 Treeview。這些控件全都是 Widget 的子類(lèi)。
ttk 控件可以改善應(yīng)用程序的外觀。如上所述,修改樣式的代碼與 tk 控件存在差異。
Tk 代碼:
l1 = tkinter.Label(text="Test", fg="black", bg="white")l2 = tkinter.Label(text="Test", fg="black", bg="white")
Ttk 代碼:
style = ttk.Style()style.configure("BW.TLabel", foreground="black", background="white")l1 = ttk.Label(text="Test", style="BW.TLabel")l2 = ttk.Label(text="Test", style="BW.TLabel")
有關(guān) TtkStyling 的更多信息,請(qǐng)參閱 Style 類(lèi)文檔。
ttk.Widget 定義了 Tk 風(fēng)格控件支持的標(biāo)準(zhǔn)屬性和方法,不應(yīng)直接對(duì)其進(jìn)行實(shí)例化。
所有 ttk 控件均可設(shè)置以下屬性:
屬性
描述
class
指定窗口類(lèi)。若要從參數(shù)庫(kù)中查找窗口的其他屬性,或確認(rèn)窗口的默認(rèn)綁定標(biāo)簽,或選擇控件的默認(rèn)布局和樣式,會(huì)用到 class 屬性。該屬性只讀,且只能在創(chuàng)建窗口時(shí)指定。
cursor
指定控件使用的鼠標(biāo)光標(biāo)。若設(shè)為空字符串(默認(rèn)值),則會(huì)繼承父控件的光標(biāo)。
takefocus
決定了窗口是否可用鍵盤(pán)獲得焦點(diǎn)。返回 0 、1 或空字符串。若返回 0,則表示在用鍵盤(pán)遍歷時(shí)應(yīng)該跳過(guò)該窗口。如果為 1,則表示只要窗口可見(jiàn)即應(yīng)接收輸入焦點(diǎn)。而空字符串則表示由遍歷代碼決定窗口是否接收焦點(diǎn)。
style
可用于指定自定義控件樣式。
帶滾動(dòng)條的控件支持以下屬性:
屬性
描述
xscrollcommand
用于與水平滾動(dòng)條通訊.
當(dāng)窗口中的可見(jiàn)內(nèi)容發(fā)生變化時(shí),控件將根據(jù) scrollcommand 生成 Tcl 命令。
通常該屬性由一些滾動(dòng)條的
Scrollbar.set()方法組成。當(dāng)窗口中的可見(jiàn)內(nèi)容發(fā)生變化時(shí),將會(huì)刷新滾動(dòng)條的狀態(tài)。yscrollcommand
用于與垂直滾動(dòng)條通訊,更多信息請(qǐng)參考上一條。
標(biāo)簽、按鈕和類(lèi)似按鈕的控件支持以下屬性。
屬性
描述
text
指定顯示在控件內(nèi)的文本。
textvariable
指定一個(gè)變量名,其值將用于設(shè)置 text 屬性。
underline
設(shè)置文本字符串中帶下劃線(xiàn)字符的索引(基于0)。下劃線(xiàn)字符用于激活快捷鍵。
image
指定一個(gè)用于顯示的圖片。這是一個(gè)由1個(gè)或多個(gè)元素組成的列表。第一個(gè)元素是默認(rèn)的圖片名稱(chēng)。列表的其余部分是由 Style.map() 定義的“狀態(tài)/值對(duì)”的序列,指定控件在某狀態(tài)或狀態(tài)組合時(shí)要采用的圖片。列表中的所有圖片應(yīng)具備相同的尺寸。
compound
指定同時(shí)存在 text 和 image 屬性時(shí),應(yīng)如何顯示文本和對(duì)應(yīng)的圖片。合法的值包括:
text::只顯示文本
image:只顯示圖片
top、bottom、left、right:分別在文本的上、下、左、右顯示圖片。
none:默認(rèn)值。 如果給出了圖片則顯示,否則顯示文本。
width
如果值大于零,指定文本標(biāo)簽留下多少空間,單位是字符數(shù);如果值小于零,則指定最小寬度。如果等于零或未指定,則使用文本標(biāo)簽本身的寬度。
屬性
描述
state
可以設(shè)為“normal”或“disabled”,以便控制“禁用”狀態(tài)標(biāo)志位。本屬性只允許寫(xiě)入:用以改變控件的狀態(tài),但 Widget.state() 方法不影響本屬性。
控件狀態(tài)是多個(gè)相互獨(dú)立的狀態(tài)標(biāo)志位的組合。
標(biāo)志位
描述
active
鼠標(biāo)光標(biāo)經(jīng)過(guò)控件并按下鼠標(biāo)按鈕,將引發(fā)動(dòng)作。
disabled
控件處于禁用狀態(tài),而由程序控制。
focus
控件接受鍵盤(pán)焦點(diǎn)。
pressed
控件已被按下。
selected
勾選或單選框之類(lèi)的控件,表示啟用、選中狀態(tài)。
background
Windows 和 Mac 系統(tǒng)的窗口具有“激活”或后臺(tái)的概念。后臺(tái)窗口的控件會(huì)設(shè)置 foreground 參數(shù),而前臺(tái)窗口的控件則會(huì)清除此狀態(tài)。
readonly
控件不允許用戶(hù)修改。
alternate
控件的備選顯式格式。
invalid
控件的值是無(wú)效的
所謂的控件狀態(tài),就是一串狀態(tài)名稱(chēng)的組合,可在某個(gè)名稱(chēng)前加上感嘆號(hào),表示該狀態(tài)位是關(guān)閉的。
除了以下方法之外,ttk.Widget 還支持 tkinter.Widget.cget() 和 tkinter.Widget.configure() 方法。
class tkinter.ttk.Widget
identify(x, y)
返回位于 x y 的控件名稱(chēng),如果該坐標(biāo)點(diǎn)不屬于任何控件,則返回空字符串。
x 和 y 是控件內(nèi)的相對(duì)坐標(biāo),單位是像素。
instate(statespec, callback=None, \args, **kw*)
檢測(cè)控件的狀態(tài)。如果沒(méi)有設(shè)置回調(diào)函數(shù),那么當(dāng)控件狀態(tài)符合 statespec 時(shí)返回 True,否則返回 False。如果指定了回調(diào)函數(shù),那么當(dāng)控件狀態(tài)匹配 statespec 時(shí)將會(huì)調(diào)用回調(diào)函數(shù),且會(huì)帶上后面的參數(shù)。
state(statespec=None)
Modify or inquire widget state. If statespec is specified, sets the widget state according to it and return a new statespec indicating which flags were changed. If statespec is not specified, returns the currently enabled state flags.
statespec 通常是個(gè)列表或元組。
ttk.Combobox 控件是文本框和下拉列表的組合體。該控件是 Entry 的子類(lèi)。
除了從 Widget 繼承的 Widget.cget() 、 Widget.configure() 、Widget.identify() 、Widget.instate() 和 Widget.state() 方法,以及從 Entry 繼承的 Entry.bbox() 、 Entry.delete() 、 Entry.icursor() 、Entry.index() 、 Entry.insert() 、 Entry.selection() 、 Entry.xview() 方法,控件還自帶了其他幾個(gè)方法,在 ttk.Combobox 中都有介紹。
控件可設(shè)置以下屬性:
屬性
描述
exportselection
布爾值,如果設(shè)為 True,則控件的選中文字將關(guān)聯(lián)為窗口管理器的選中文字(可由 Misc.selection_get 返回)。
justify
指定文本在控件中的對(duì)齊方式??蔀?left、center、right 之一。
height
設(shè)置下拉列表框的高度。
postcommand
在顯示之前將被調(diào)用的代碼(可用 Misc.register 進(jìn)行注冊(cè))。可用于選擇要顯示的值。
state
normal 、readonly 或 disabled。在 readonly 狀態(tài)下,數(shù)據(jù)不能直接編輯,用戶(hù)只能從下拉列表中選取。在 normal 狀態(tài)下,可直接編輯文本框。在 disabled 狀態(tài)下,無(wú)法做任何交互。
textvariable
設(shè)置一個(gè)變量名,其值與控件的值關(guān)聯(lián)。每當(dāng)該變量對(duì)應(yīng)的值發(fā)生變動(dòng)時(shí),控件值就會(huì)更新,反之亦然。參見(jiàn)
tkinter.StringVar。values
設(shè)置顯示于下拉列表中的值。
width
設(shè)置為整數(shù)值,表示輸入窗口的應(yīng)有寬度,單位是字符單位(控件字體的平均字符寬度)。
當(dāng)用戶(hù)從下拉列表中選擇某個(gè)元素時(shí),控件會(huì)生成一條 <
class tkinter.ttk.Combobox
current(newindex=None)
如果給出了 newindex,則把控件值設(shè)為 newindex 位置的元素值。否則,返回當(dāng)前值的索引,當(dāng)前值未在列表中則返回 -1。
get()
返回控件的當(dāng)前值。
set(value)
設(shè)置控件的值為 value 。
ttk.Spinbox 控件是 ttk.Entry 的擴(kuò)展,帶有遞增和遞減箭頭??捎糜跀?shù)字或字符串列表。這是 Entry 的子類(lèi)。
除了從 Widget 繼承的 Widget.cget() 、 Widget.configure() 、Widget.identified() 、 Widget.instate() 和 Widget.state() 方法,以及從 Entry 繼承的 Entry. bbox() 、 Entry.delete() 、 Entry.icursor() 、Entry.index() 、 Entry.insert() 、 Entry.xview() 方法,控件還自帶了其他一些方法,在 ttk.Spinbox 中都有介紹。
控件可設(shè)置以下屬性:
|
屬性 |
描述 |
|---|---|
from |
浮點(diǎn)值。如若給出,則為遞減按鈕能夠到達(dá)的最小值。作為參數(shù)使用時(shí)必須寫(xiě)成 |
to |
浮點(diǎn)值。如若給出,則為遞增按鈕能夠到達(dá)的最大值。 |
increment |
浮點(diǎn)值。指定遞增/遞減按鈕每次的修改量。默認(rèn)值為 1.0。 |
values |
字符串或浮點(diǎn)值構(gòu)成的序列。如若給出,則遞增/遞減會(huì)在此序列元素間循環(huán),而不是增減數(shù)值。 |
wrap |
布爾值。若為 |
format |
字符串。指定遞增/遞減按鈕的數(shù)字格式。必須以“%W.Pf”的格式給出,W 是填充的寬度,P 是小數(shù)精度,% 和 f 就是本身的含義。 |
command |
Python 回調(diào)函數(shù)。只要遞增或遞減按鈕按下之后,就會(huì)進(jìn)行不帶參數(shù)的調(diào)用。 |
用戶(hù)若按下
class tkinter.ttk.Spinbox
get()
返回控件的當(dāng)前值。
set(value)
設(shè)置控件值為 value。
Ttk Notebook widget manages a collection of windows and displays a single one at a time. Each child window is associated with a tab, which the user may select to change the currently displayed window.
控件可設(shè)置以下屬性:
屬性
描述
height
如若給出且大于 0,則指定面板的應(yīng)有高度(不含內(nèi)部 padding 或 tab)。否則會(huì)采用所有子窗口面板的最大高度。
padding
指定在控件外部添加的留白。padding 是最多包含四個(gè)值的列表,指定左頂右底的空間。如果給出的元素少于四個(gè),底部值默認(rèn)為頂部值,右側(cè)值默認(rèn)為左側(cè)值,頂部值默認(rèn)為左側(cè)值。
width
若給出且大于 0,則設(shè)置面板的應(yīng)有寬度(不含內(nèi)部 padding)。否則將采用所有子窗口面板的最大寬度。
Tab 特有屬性如下:
屬性
描述
state
可為 normal、disabled 或 disabled 之一。若為 disabled 則不能選中。若為 hidden 則不會(huì)顯示。
sticky
指定子窗口在面板內(nèi)的定位方式。應(yīng)為包含零個(gè)或多個(gè) n、s、e 、w 字符的字符串。每個(gè)字母表示子窗口應(yīng)緊靠的方向(北、南、東或西),正如
grid()位置管理器所述。padding
指定控件和面板之間的留白空間。格式與本控件的 padding 屬性相同。
text
指定顯示在 tab 上的文本。
image
指定顯示在 tab 上的圖片。參見(jiàn) Widget 的 image 屬性。
compound
當(dāng)文本和圖片同時(shí)存在時(shí),指定圖片相對(duì)于文本的顯示位置。合法的屬性值參見(jiàn) Label Options 。
underline
指定下劃線(xiàn)在文本字符串中的索引(基于0)。如果調(diào)用過(guò)了 Notebook.enable_traversal(),帶下劃線(xiàn)的字符將用于激活快捷鍵。
The tab_id present in several methods of ttk.Notebook may take any of the following forms:
介于 0 和 tab 總數(shù)之間的整數(shù)值。
子窗口的名稱(chēng)。
以“@x,y”形式給出的位置,唯一標(biāo)識(shí)了 tab 頁(yè)。
The literal string “current”, which identifies the currently selected tab
字符串字面值 “end”,它返回標(biāo)簽頁(yè)的數(shù)量 (僅適用于 Notebook.index())
當(dāng)選中一個(gè)新 tab 頁(yè)之后,控件會(huì)生成一條 <
class tkinter.ttk.Notebook
add(child, \*kw*)
添加一個(gè)新 tab 頁(yè)。
如果窗口是由 Notebook 管理但處于隱藏狀態(tài),則會(huì)恢復(fù)到之前的位置。
可用屬性請(qǐng)參見(jiàn) Tab Options 。
forget(tab_id)
刪除 tab_id 指定的 tab 頁(yè),對(duì)其關(guān)聯(lián)的窗口不再作映射和管理。
hide(tab_id)
隱藏 tab_id 指定的 tab 頁(yè)。
tab 頁(yè)不會(huì)顯示出來(lái),但關(guān)聯(lián)的窗口仍接受 Notebook 的管理,其配置屬性會(huì)繼續(xù)保留。隱藏的 tab 頁(yè)可由 add() 恢復(fù)。
identify(x, y)
返回 tab 頁(yè)內(nèi)位置為 x、y 的控件名稱(chēng),若不存在則返回空字符串。
index(tab_id)
返回 tab_id 指定 tab 頁(yè)的索引值,如果 tab_id 為 end 則返回 tab 頁(yè)的總數(shù)。
insert(pos, child, \*kw*)
在指定位置插入一個(gè) tab。
pos 可為字符串“end” 、整數(shù)索引值或子窗口名稱(chēng)。如果 child 已由 Notebook 管理,則將其移至指定位置。
可用屬性請(qǐng)參見(jiàn) Tab Options 。
select(tab_id=None)
選中 tab_id 指定 tab。
The associated child window will be displayed, and the previously selected window (if different) is unmapped. If tab_id is omitted, returns the widget name of the currently selected pane.
tab(tab_id, option=None, \*kw*)
查詢(xún)或修改 tab_id 指定 tab 的屬性。
如果未給出 kw ,則返回由 tab 屬性組成的字典。如果指定了 option,則返回其值。否則,設(shè)置屬性值。
tabs()
返回 Notebook 管理的窗口列表。
enable_traversal()
為包含 Notebook 的頂層窗口啟用鍵盤(pán)遍歷。
這將為包含 Notebook 的頂層窗口增加如下鍵盤(pán)綁定關(guān)系:
Control-Tab :選中當(dāng)前 tab 之后的頁(yè)。
Shift-Control-Tab :選中當(dāng)前 tab 之前的頁(yè)。
Alt-K :這里 K 是任意 tab 頁(yè)的快捷鍵(帶下劃線(xiàn))字符,將會(huì)直接選中該 tab。
一個(gè)頂層窗口中可為多個(gè) Notebook 啟用鍵盤(pán)遍歷,包括嵌套的 Notebook 。但僅當(dāng)所有面板都將所在 Notebook 作為父控件時(shí),鍵盤(pán)遍歷才會(huì)生效。
ttk.Progressbar 控件可為長(zhǎng)時(shí)間操作顯示狀態(tài)??晒ぷ饔趦煞N模式:1)determinate 模式,顯示相對(duì)完成進(jìn)度;2) indeterminate 模式,顯示動(dòng)畫(huà)讓用戶(hù)知道工作正在進(jìn)行中。
控件可設(shè)置以下屬性:
屬性
描述
orient
horizontal 或 vertical。指定進(jìn)度條的顯示方向。
length
指定進(jìn)度條長(zhǎng)軸的長(zhǎng)度(橫向?yàn)閷挾龋v向則為高度)。
mode
determinate 或 indeterminate。
maximum
設(shè)定最大值。默認(rèn)為 100。
value
進(jìn)度條的當(dāng)前值。在 determinate 模式下代表已完成的工作量。在 indeterminate 模式下,解釋為 maximum 的模;也就是說(shuō),當(dāng)本值增至 maximum 時(shí),進(jìn)度條完成了一個(gè)“周期”。
variable
與屬性值關(guān)聯(lián)的變量名。若給出,則當(dāng)變量值變化時(shí)會(huì)自動(dòng)設(shè)為進(jìn)度條的值。
phase
只讀屬性。只要值大于 0 且在 determinate 模式下小于最大值,控件就會(huì)定期增大該屬性值。當(dāng)前主題可利用本屬性提供額外的動(dòng)畫(huà)效果。
class tkinter.ttk.Progressbar
start(interval=None)
開(kāi)啟自增模式:安排一個(gè)循環(huán)的定時(shí)器事件,每隔 interval 毫秒調(diào)用一次 Progressbar.step()。interval 可省略,默認(rèn)為 50毫秒。
step(amount=None)
將進(jìn)度條的值增加 amount。
amount 可省略,默認(rèn)為 1.0。
stop()
停止自增模式:取消所有由 Progressbar.start() 啟動(dòng)的循環(huán)定時(shí)器事件。
ttk.Separator 控件用于顯示橫向或縱向的分隔條。
除由 ttk.Widget 繼承而來(lái)的方法外,沒(méi)有定義其他方法。
屬性如下:
屬性
描述
orient
horizontal 或 vertical。指定分隔條的方向。
ttk.Sizegrip 控件允許用戶(hù)通過(guò)按下并拖動(dòng)控制柄來(lái)調(diào)整內(nèi)部頂層窗口的大小。
除由 ttk.Widget 繼承的之外,沒(méi)有其他屬性和方法。
Sizegrip 也沒(méi)什么壞處,因?yàn)閮?nèi)置的控制柄會(huì)蓋住該控件。假如內(nèi)部的頂層窗口位置是相對(duì)于屏幕的右側(cè)或底部進(jìn)行設(shè)置的,那么 Sizegrip 控件將不會(huì)改變窗口的大小。
Sizegrip 僅支持往“東南”方向的縮放。
ttk.Treeview 控件可將多項(xiàng)內(nèi)容分層級(jí)顯示。每個(gè)數(shù)據(jù)項(xiàng)抖帶有一個(gè)文本標(biāo)簽、一張圖片(可選)和一個(gè)數(shù)據(jù)列表(可選)。這些數(shù)據(jù)值將在樹(shù)標(biāo)簽后面分列顯示。
數(shù)據(jù)值的顯示順序可用屬性 displaycolumns 進(jìn)行控制。樹(shù)控件還可以顯示列標(biāo)題。數(shù)據(jù)列可通過(guò)數(shù)字或名稱(chēng)進(jìn)行訪問(wèn),各列的名稱(chēng)在屬性 columns 中列出。參閱 Column Identifiers。
每個(gè)數(shù)據(jù)項(xiàng)都由唯一名稱(chēng)進(jìn)行標(biāo)識(shí)。如果調(diào)用者未提供數(shù)據(jù)項(xiàng)的 ID,樹(shù)控件會(huì)自動(dòng)生成。根有且只有一個(gè),名為 {}。根本身不會(huì)顯示出來(lái);其子項(xiàng)將顯示在頂層。
每個(gè)數(shù)據(jù)項(xiàng)均帶有一個(gè) tag 列表,可用于綁定事件及控制外觀。
Treeview 組件支持水平和垂直滾動(dòng),滾動(dòng)時(shí)會(huì)依據(jù) Scrollable Widget Options 描述的屬性和 Treeview.xview() 和 Treeview.yview() 方法。
控件可設(shè)置以下屬性:
屬性
描述
columns
列標(biāo)識(shí)的列表,定義了列的數(shù)量和名稱(chēng)。
displaycolumns
列標(biāo)識(shí)的列表(索引可為符號(hào)或整數(shù)),指定要顯示的數(shù)據(jù)列及顯示順序,或?yàn)樽址?“#all”。
height
指定可見(jiàn)的行數(shù)。注意:所需寬度由各列寬度之和決定。
padding
指定控件內(nèi)部的留白。為不超過(guò)四個(gè)元素的長(zhǎng)度列表。
selectmode
控制內(nèi)部類(lèi)如何進(jìn)行選中項(xiàng)的管理??蔀?extended、browse 或 none。若設(shè)為 extended(默認(rèn)),則可選中多個(gè)項(xiàng)。若為 browse ,則每次只能選中一項(xiàng)。若為 none,則無(wú)法修改選中項(xiàng)。
請(qǐng)注意,代碼和 tag 綁定可自由進(jìn)行選中操作,不受本屬性的限制。
show
由0個(gè)或下列值組成的列表,指定要顯示樹(shù)的哪些元素。
tree :在 #0 列顯示樹(shù)的文本標(biāo)簽。
headings :顯示標(biāo)題行。
默認(rèn)為“tree headings”,顯示所有元素。
注意 :第 #0 列一定是指 tree 列,即便未設(shè)置 show=”tree” 也一樣。
可在插入和數(shù)據(jù)項(xiàng)操作時(shí)設(shè)置以下屬性。
屬性
描述
text
用于顯示的文本標(biāo)簽。
image
Tk 圖片對(duì)象,顯示在文本標(biāo)簽左側(cè)。
values
關(guān)聯(lián)的數(shù)據(jù)值列表。
每個(gè)數(shù)據(jù)項(xiàng)關(guān)聯(lián)的數(shù)據(jù)數(shù)量應(yīng)與 columns 屬性相同。如果比 columns 屬性的少,剩下的值將視為空。如果多于 columns 屬性的,多余數(shù)據(jù)將被忽略。
open
True或False,表明是否顯示數(shù)據(jù)項(xiàng)的子樹(shù)。tags
與該數(shù)據(jù)項(xiàng)關(guān)聯(lián)的 tag 列表。
tag 可定義以下屬性:
屬性
描述
foreground
定義文本前景色。
background
定義單元格或數(shù)據(jù)項(xiàng)的背景色。
font
定義文本的字體。
image
定義數(shù)據(jù)項(xiàng)的圖片,當(dāng) image 屬性為空時(shí)使用。
列標(biāo)識(shí)可用以下格式給出:
由 columns 屬性給出的符號(hào)名。
整數(shù)值 n,指定第 n 列。
注意:
數(shù)據(jù)項(xiàng)屬性的顯示順序可能與存儲(chǔ)順序不一樣。
數(shù)據(jù)列號(hào)是指屬性值列表中的索引值,顯示列號(hào)是指顯示在樹(shù)控件中的列號(hào)。樹(shù)的文本標(biāo)簽將顯示在 #0 列。如果未設(shè)置 displaycolumns 屬性,則數(shù)據(jù)列 n 將顯示在第 #n+1 列。再次強(qiáng)調(diào)一下,#0 列一定是指 tree 列 。
Treeview 控件會(huì)生成以下虛擬事件。
事件
描述
<
> 當(dāng)選中項(xiàng)發(fā)生變化時(shí)生成。
<
> 當(dāng)焦點(diǎn)所在項(xiàng)的 open= True 之前立即生成。
<
> 當(dāng)焦點(diǎn)所在項(xiàng)的 open= True 之后立即生成。
Treeview.focus() 和 Treeview.selection() 方法可用于確認(rèn)涉及的數(shù)據(jù)項(xiàng)。
class tkinter.ttk.Treeview
bbox(item, column=None)
返回某 數(shù)據(jù)項(xiàng) 的邊界(相對(duì)于控件窗口的坐標(biāo)),形式為 (x, y, width, height) 。
若給出了 column,則返回該單元格的邊界。若該 數(shù)據(jù)項(xiàng) 不可見(jiàn)(即從屬于已關(guān)閉項(xiàng)或滾動(dòng)至屏幕外),則返回空字符串。
get_children(item=None)
返回 item 的下屬數(shù)據(jù)項(xiàng)列表。
若未給出 item ,則返回根的下屬數(shù)據(jù)。
set_children(item, \newchildren*)
用 newchildren 替換 item 的下屬數(shù)據(jù)。
對(duì)于 item 中存在而 newchildren 中不存在的數(shù)據(jù)項(xiàng),會(huì)從樹(shù)中移除。newchildren 中的數(shù)據(jù)不能是 item 的上級(jí)。注意,未給出 newchildren 會(huì)導(dǎo)致 item 的子項(xiàng)被解除關(guān)聯(lián)。
column(column, option=None, \*kw*)
查詢(xún)或修改列 column 的屬性。
如果未給出 kw,則返回屬性值的字典。若指定了 option,則會(huì)返回該屬性值。否則將設(shè)置屬性值。
合法的 屬性/值 可為:
id
返回列名。這是只讀屬性。
anchor:標(biāo)準(zhǔn)的 Tk 錨點(diǎn)值。
指定該列的文本在單元格內(nèi)的對(duì)齊方式。
minwidth:寬度。
列的最小寬度,單位是像素。在縮放控件或用戶(hù)拖動(dòng)某一列時(shí),Treeview 會(huì)保證列寬不小于此值。
stretch: True/False
指明縮放控件時(shí)是否調(diào)整列寬。
width:寬度
列寬,單位為像素?cái)?shù)。
若要設(shè)置 tree 列,請(qǐng)帶上參數(shù) column = “#0” 進(jìn)行調(diào)用。
delete(\items*)
刪除所有 items 及其下屬。
根不能刪除。
detach(\items*)
將所有 items 與樹(shù)解除關(guān)聯(lián)。
數(shù)據(jù)項(xiàng)及其下屬依然存在,后續(xù)可以重新插入,目前只是不顯示出來(lái)。
根不能解除關(guān)聯(lián)。
exists(item)
如果給出的 item 位于樹(shù)中,則返回 True。
focus(item=None)
如果給出 item 則設(shè)為當(dāng)前焦點(diǎn)。否則返回當(dāng)前焦點(diǎn)所在數(shù)據(jù)項(xiàng),若無(wú)則返回 ‘’。
heading(column, option=None, \*kw*)
查詢(xún)或修改某 column 的標(biāo)題。
若未給出 kw,則返回列標(biāo)題組成的列表。若給出了 option 則返回對(duì)應(yīng)屬性值。否則,設(shè)置屬性值。
合法的 屬性/值 可為:
text:文本。
顯示為列標(biāo)題的文本。
image:圖片名稱(chēng)
指定顯示在列標(biāo)題右側(cè)的圖片。
anchor:錨點(diǎn)
指定列標(biāo)題文本的對(duì)齊方式。應(yīng)為標(biāo)準(zhǔn)的 Tk 錨點(diǎn)值。
command:回調(diào)函數(shù)
點(diǎn)擊列標(biāo)題時(shí)執(zhí)行的回調(diào)函數(shù)。
若要對(duì) tree 列進(jìn)行設(shè)置,請(qǐng)帶上 column = “#0” 進(jìn)行調(diào)用。
identify(component, x, y)
返回 x、y 位置上 component 數(shù)據(jù)項(xiàng)的描述信息,如果此處沒(méi)有該數(shù)據(jù)項(xiàng),則返回空字符串。
identify_row(y)
返回 y 位置上的數(shù)據(jù)項(xiàng) ID。
identify_column(x)
返回 x 位置上的單元格所在的數(shù)據(jù)列 ID。
tree 列的 ID 為 #0 。
identify_region(x, y)
返回以下值之一:
|
區(qū)域 |
含義 |
|---|---|
heading |
樹(shù)的標(biāo)題欄區(qū)域。 |
separator |
兩個(gè)列標(biāo)題之間的間隔區(qū)域。 |
tree |
樹(shù)區(qū)域。 |
cell |
數(shù)據(jù)單元格。 |
可用性:Tk 8.6。
identify_element(x, y)
返回位于 x 、y 的數(shù)據(jù)項(xiàng)。
可用性:Tk 8.6。
index(item)
返回 item 在父項(xiàng)的子項(xiàng)列表中的整數(shù)索引。
insert(parent, index, iid=None, \*kw*)
新建一個(gè)數(shù)據(jù)項(xiàng)并返回其 ID。
parent 是父項(xiàng)的 ID,若要新建頂級(jí)項(xiàng)則為空字符串。 index 是整數(shù)或“end”,指明在父項(xiàng)的子項(xiàng)列表中的插入位置。如果 index 小于等于0,則在開(kāi)頭插入新節(jié)點(diǎn);如果 index 大于或等于當(dāng)前子節(jié)點(diǎn)數(shù),則將其插入末尾。如果給出了 iid,則將其用作數(shù)據(jù)項(xiàng) ID; iid 不得存在于樹(shù)中。否則會(huì)新生成一個(gè)唯一 ID。
此處可設(shè)置的屬性請(qǐng)參閱 Item Options 。
item(item, option=None, \*kw*)
查詢(xún)或修改某 item 的屬性。
如果未給出 option,則返回屬性/值構(gòu)成的字典。如果給出了 option,則返回該屬性的值。否則,將屬性設(shè)為 kw 給出的值。
move(item, parent, index)
將 item 移至指定位置,父項(xiàng)為 parent ,子項(xiàng)列表索引為 index 。
將數(shù)據(jù)項(xiàng)移入其子項(xiàng)之下是非法的。如果 index 小于等于0,item 將被移到開(kāi)頭;如果大于等于子項(xiàng)的總數(shù),則被移至最后。如果 item 已解除關(guān)聯(lián),則會(huì)被重新關(guān)聯(lián)。
next(item)
返回 item 的下一個(gè)相鄰項(xiàng),如果 item 是父項(xiàng)的最后一個(gè)子項(xiàng),則返回 ‘’。
parent(item)
返回 item 的父項(xiàng) ID,如果 item 為頂級(jí)節(jié)點(diǎn),則返回 ‘’。
prev(item)
返回 item 的前一個(gè)相鄰項(xiàng),若 item 為父項(xiàng)的第一個(gè)子項(xiàng),則返回 ‘’。
reattach(item, parent, index)
Treeview.move() 的別名。
see(item)
確保 item 可見(jiàn)。
將 item 所有上級(jí)的 open 屬性設(shè)為 True,必要時(shí)會(huì)滾動(dòng)控件,讓 item 處于樹(shù)的可見(jiàn)部分。
selection()
返回由選中項(xiàng)構(gòu)成的元組。
在 3.8 版更改: selection() 不再接受參數(shù)了。若要改變選中的狀態(tài),請(qǐng)使用下面介紹的方法。
selection_set(\items*)
讓 items 成為新的選中項(xiàng)。
在 3.6 版更改: items 可作為多個(gè)單獨(dú)的參數(shù)傳遞,而不只是作為一個(gè)元組。
selection_add(\items*)
將 items 加入選中項(xiàng)。
在 3.6 版更改: items 可作為多個(gè)單獨(dú)的參數(shù)傳遞,而不只是作為一個(gè)元組。
selection_remove(\items*)
從選中項(xiàng)中移除 items 。
在 3.6 版更改: items 可作為多個(gè)單獨(dú)的參數(shù)傳遞,而不只是作為一個(gè)元組。
selection_toggle(\items*)
切換 items 中各項(xiàng)的選中狀態(tài)。
在 3.6 版更改: items 可作為多個(gè)單獨(dú)的參數(shù)傳遞,而不只是作為一個(gè)元組。
set(item, column=None, value=None)
若帶一個(gè)參數(shù),則返回 item 的列/值字典。若帶兩個(gè)參數(shù),則返回 column 的當(dāng)前值。若帶三個(gè)參數(shù),則將 item 的 column 設(shè)為 value。
tag_bind(tagname, sequence=None, callback=None)
為 tag 為 tagname 的數(shù)據(jù)項(xiàng)綁定事件 sequence 的回調(diào)函數(shù)。當(dāng)事件分發(fā)給該數(shù)據(jù)項(xiàng)時(shí),tag 參數(shù)為 tagname 的全部數(shù)據(jù)項(xiàng)的回調(diào)都會(huì)被調(diào)用到。
tag_configure(tagname, option=None, \*kw*)
查詢(xún)或修改 tagname 指定項(xiàng)的屬性。
如果給出了 kw,則返回 tagname 項(xiàng)的屬性字典。如果給出了 option,則返回 tagname 項(xiàng)的 option 屬性值。否則,設(shè)置 tagname 項(xiàng)的屬性值。
tag_has(tagname, item=None)
如果給出了 item ,則依據(jù) item 是否具備 tagname 而返回 1 或 0。否則,返回 tag 為 tagname 的所有數(shù)據(jù)項(xiàng)構(gòu)成的列表。
可用性:Tk 8.6。
xview(\args*)
查詢(xún)或修改 Treeview 的橫向位置。
yview(\args*)
查詢(xún)或修改 Treeview 的縱向位置。
ttk 的每種控件都賦有一個(gè)樣式,指定了控件內(nèi)的元素及其排列方式,以及元素屬性的動(dòng)態(tài)和默認(rèn)設(shè)置。默認(rèn)情況下,樣式名與控件的類(lèi)名相同,但可能會(huì)被控件的 style 屬性覆蓋。如果不知道控件的類(lèi)名,可用 Misc.winfo_class() 方法獲?。╯omewidget.winfo_class())。
參見(jiàn)
Tcl’2004 conference presentation
文章解釋了主題引擎的工作原理。
class tkinter.ttk.Style
用于操控樣式數(shù)據(jù)庫(kù)的類(lèi)。
configure(style, query_opt=None, \*kw*)
查詢(xún)或設(shè)置 style 的默認(rèn)屬性值。
Each key in kw is an option and each value is a string identifying the value for that option.
例如,要將默認(rèn)按鈕改為扁平樣式,并帶有留白和各種背景色:
from tkinter import ttkimport tkinterroot = tkinter.Tk()ttk.Style().configure("TButton", padding=6, relief="flat",background="#ccc")btn = ttk.Button(text="Sample")btn.pack()root.mainloop()
map(style, query_opt=None, \*kw*)
查詢(xún)或設(shè)置 style 的指定屬性的動(dòng)態(tài)值。
kw 的每個(gè)鍵都是一個(gè)屬性,每個(gè)值通常應(yīng)為列表或元組,其中包含以元組、列表或其他形式組合而成的狀態(tài)標(biāo)識(shí)(statespec)。狀態(tài)標(biāo)識(shí)是由一個(gè)或多個(gè)狀態(tài)組合,加上一個(gè)值組成。
舉個(gè)例子能更清晰些:
import tkinterfrom tkinter import ttkroot = tkinter.Tk()style = ttk.Style()style.map("C.TButton",foreground=[('pressed', 'red'), ('active', 'blue')],background=[('pressed', '!disabled', 'black'), ('active', 'white')])colored_btn = ttk.Button(text="Test", style="C.TButton").pack()root.mainloop()
請(qǐng)注意,要點(diǎn)是屬性的(狀態(tài),值)序列的順序,如果前景色屬性的順序改為 [('active', 'blue'), ('pressed', 'red')] ,則控件處于激活或按下?tīng)顟B(tài)時(shí)的前景色將為藍(lán)色。
lookup(style, option, state=None, default=None)
返回 style 中的 option 屬性值。
如果給出了 state ,則應(yīng)是一個(gè)或多個(gè)狀態(tài)組成的序列。如果設(shè)置了 default 參數(shù),則在屬性值缺失時(shí)會(huì)用作后備值。
若要檢測(cè)按鈕的默認(rèn)字體,可以:
from tkinter import ttkprint(ttk.Style().lookup("TButton", "font"))
layout(style, layoutspec=None)
按照 style 定義控件布局。如果省略了 layoutspec,則返回該樣式的布局屬性。
若給出了 layoutspec,則應(yīng)為一個(gè)列表或其他的序列類(lèi)型(不包括字符串),其中的數(shù)據(jù)項(xiàng)應(yīng)為元組類(lèi)型,第一項(xiàng)是布局名稱(chēng),第二項(xiàng)的格式應(yīng)符合 Layouts 的描述。
以下示例有助于理解這種格式(這里并沒(méi)有實(shí)際意義):
from tkinter import ttkimport tkinterroot = tkinter.Tk()style = ttk.Style()style.layout("TMenubutton", [("Menubutton.background", None),("Menubutton.button", {"children":[("Menubutton.focus", {"children":[("Menubutton.padding", {"children":[("Menubutton.label", {"side": "left", "expand": 1})]})]})]}),])mbtn = ttk.Menubutton(text='Text')mbtn.pack()root.mainloop()
element_create(elementname, etype, \args, **kw*)
在當(dāng)前主題中創(chuàng)建一個(gè)新元素 etype ,應(yīng)為 image、from 或 vsapi。后者僅在 Windows XP 和 Vista 版的 Tk 8.6a 中可用,此處不再贅述。
如果用了 image,則 args 應(yīng)包含默認(rèn)的圖片名,后面跟著 狀態(tài)標(biāo)識(shí)/值(這里是 imagespec),kw 可帶有以下屬性:
border=padding
padding 是由不超過(guò)四個(gè)整數(shù)構(gòu)成的列表,分別定義了左、頂、右、底的邊界。
height=height
定義了元素的最小高度。如果小于零,則默認(rèn)采用圖片本身的高度。
padding=padding
定義了元素的內(nèi)部留白。若未指定則默認(rèn)采用 border 值。
sticky=spec
定義了圖片的對(duì)齊方式。spec 包含零個(gè)或多個(gè) n、s、w、e 字符。
width=width
定義了元素的最小寬度。如果小于零,則默認(rèn)采用圖片本身的寬度。
如果 etype 的值用了 from,則 element_create() 將復(fù)制一個(gè)現(xiàn)有的元素。 args 應(yīng)包含主題名和可選的要復(fù)制的元素。若未給出要克隆的元素,則采用空元素。 kw 參數(shù)將被丟棄。
element_names()
返回當(dāng)前主題已定義的元素列表 。
element_options(elementname)
返回 elementname 元素的屬性列表。
theme_create(themename, parent=None, settings=None)
新建一個(gè)主題。
如果 themename 已經(jīng)存在,則會(huì)報(bào)錯(cuò)。如果給出了 parent,則新主題將從父主題繼承樣式、元素和布局。若給出了 settings ,則語(yǔ)法應(yīng)與 theme_settings() 的相同。
theme_settings(themename, settings)
將當(dāng)前主題臨時(shí)設(shè)為 themename,并應(yīng)用 settings,然后恢復(fù)之前的主題。
settings 中的每個(gè)鍵都是一種樣式而每個(gè)值可能包含 ‘configure’, ‘map’, ‘layout’ 和 ‘element create’ 等鍵并且它們被預(yù)期具有與分別由 Style.configure(), Style.map(), Style.layout() 和 Style.element_create() 方法所指定的相符的格式。
以下例子會(huì)對(duì) Combobox 的默認(rèn)主題稍作修改:
from tkinter import ttkimport tkinterroot = tkinter.Tk()style = ttk.Style()style.theme_settings("default", {"TCombobox": {"configure": {"padding": 5},"map": {"background": [("active", "green2"),("!disabled", "green4")],"fieldbackground": [("!disabled", "green3")],"foreground": [("focus", "OliveDrab1"),("!disabled", "OliveDrab2")]}}})combo = ttk.Combobox().pack()root.mainloop()
theme_names()
返回所有已知主題的列表。
theme_use(themename=None)
若未給出 themename,則返回正在使用的主題。否則,將當(dāng)前主題設(shè)為 themename,刷新所有控件并引發(fā) <
布局在沒(méi)有屬性時(shí)可以為 None ,或是定義了元素排列方式的屬性字典。布局機(jī)制采用了位置管理器的簡(jiǎn)化版本:給定一個(gè)初始容器(cavity),為每個(gè)元素都分配一個(gè)包裝盒(parcel)。合法的選項(xiàng)/值包括:
side: whichside
指定元素置于容器的哪一側(cè); 頂、右、底或左。如果省略,則該元素將占據(jù)整個(gè)容器。
sticky: nswe
指定元素在已分配包裝盒內(nèi)的放置位置。
unit: 0 或 1
如果設(shè)為 1,則將元素及其所有后代均視作單個(gè)元素以供 Widget.identify() 等使用。 它被用于滾動(dòng)條之類(lèi)帶有控制柄的東西。
children: [sublayout… ]
指定要放置于元素內(nèi)的元素列表。每個(gè)元素都是一個(gè)元組(或其他序列類(lèi)型),其中第一項(xiàng)是布局名稱(chēng),另一項(xiàng)是個(gè) Layout 。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流