tkinter.ttk --- Tk主題小部件?
源代碼: Lib/tkinter/ttk.py
tkinter.ttk 模塊自 Tk 8.5 開始引入,可用于訪問 Tk 風格的控件包。如果 Python 未基于 Tk 8.5 編譯,只要安裝了 Tile 仍可訪問本模塊。前一種采用 Tk 8.5 的方式帶有更多好處,比如在 X11 系統下支持反鋸齒字體渲染和透明窗口(需要 X11 中的窗口組管理器)。
tkinter.ttk 的基本設計思路,就是盡可能地把控件的行為代碼與實現其外觀的代碼分離開來。
參見
- Tk 控件風格
一份文檔介紹Tk支持的主題
使用 Ttk?
開始使用 Ttk, 導入模塊:
from tkinter import ttk
重寫基礎Tk部件,導入應跟隨Tk導入:
from tkinter import *
from tkinter.ttk import *
這段代碼會讓以下幾個 tkinter. ttk 控件(Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale 和 Scrollbar)自動替換掉 Tk 的對應控件。
使用新控件的直接好處,是擁有更好的跨平臺的外觀,但新舊控件并不完全兼容。主要區別在于,Ttk 組件不再包含“fg”、“bg”等與樣式相關的參數 。而是用 ttk.Style 類來定義更美觀的樣式效果。
參見
- 將現有的應用程序轉換為 Tile 控件,可參考 Converting existing applications to use Tile widgets 。
此文介紹使用新控件時的常見差別(使用 Tcl )。
Ttk 部件?
ttk 中有 18 種部件 ,其中十二種已存在于 tkinter 中: Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale, Scrollbar 以及 Spinbox。 另外六種是新增的: Combobox, Notebook, Progressbar, Separator, Sizegrip 以及 Treeview。 它們全都是 Widget 的子類。
ttk 控件可以改善應用程序的外觀。如上所述,修改樣式的代碼與 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")
有關 TtkStyling 的更多信息,請參閱 Style 類文檔。
控件?
ttk.Widget 定義了 Tk 主題小部件支持的標準選項和方法,不應該直接實例化。
標準選項?
所有 ttk 小部件接受以下選項:
選項
描述
class -- 類
指定窗口類。在查詢選項數據庫中窗口的其他選項時,使用該類,確定窗口的默認綁定標簽,以及選擇窗口小部件的默認布局和樣式。此選項僅為只讀,并且只能在創建窗口時指定。
cursor
指定要用于窗口小部件的鼠標光標。如果設置為空字符串(默認值),則為父窗口小部件繼承光標.
takefocus
確定窗口是否在鍵盤遍歷期間接受焦點。返回0或1,返回空字符串。如果返回0,則表示在鍵盤遍歷期間應該跳過該窗口。如果為1,則表示只要可以查看窗口就應該接收輸入焦點。并且空字符串意味著遍歷腳本決定是否關注窗口。
style
可用于指定自定義窗口小部件樣式。
可滾動控件選項?
控件支持以下選項使用滾動條控制.
選項
描述
xscroll命令
用于與垂直滾動條通訊.
當視圖在部件窗口改變,部件將會基于scroll命令生成Tcl命令.
通常該參數由滾動條的
Scrollbar.set()方法組成。當窗口中的可見內容發生變化時,將會刷新滾動條的狀態。yscroll命令
用于與垂直滾動條通訊.更多信息請參考上面的信息.
標簽選項?
以下選項支持標簽,按鈕已經其他類按鈕的控件.
選項
描述
文本
指定顯示在控件內的文本。
文本變量
指定一個變量名,其值將用于設置 text 參數。
下劃線
設置文本字符串中帶下劃線字符的索引(基于0)。下劃線字符用于激活快捷鍵。
圖片
指定一個用于顯示的圖像。這是一個由1個或多個元素組成的列表。第一個元素是默認的圖像名稱。列表的其余部分是由
Style.map()定義的“狀態/值對”的序列,指定控件在某狀態或狀態組合時要采用的圖像。列表中的所有圖像應具備相同的尺寸。compound
指定同時存在 text 和 image 參數時,應如何顯示文本和對應的圖片。合法的值包括:
text: 只顯示文本
image: 只顯示圖片
top, bottom, left, right: 分別顯示圖片的上,下,左,右的文本.
none: 默認. 如果設置顯示圖片, 否則文本.
寬度
如果值大于零,指定文本標簽留下多少空間,單位是字符數;如果值小于零,則指定最小寬度。如果等于零或未指定,則使用文本標簽本身的寬度。
兼容性選項?
選項
描述
狀況
可以設為“normal”或“disabled”,以便控制“禁用”狀態標志位。本參數只允許寫入:用以改變控件的狀態,但
Widget.state()方法不影響本參數。
控件狀態?
控件狀態是無關狀態標志的位圖.
標志
描述
活動
鼠標光標經過控件并按下鼠標按鈕,將引發動作。
禁用
在程序控制下控件是禁用的
焦點
控件有鍵盤焦點
按壓
控件已被按下。
選擇
勾選或單選框之類的控件,表示啟用、選中狀態。
背景
Windows 和 Mac 系統的窗口具有“激活”或后臺的概念。后臺窗口的控件會設置 foreground 參數,而前臺窗口的控件則會清除此狀態。
只讀
控件不允許用戶修改。
alternate
控件的備選顯式格式。
無效的
控件的值是無效的
所謂的控件狀態,就是一串狀態名稱的組合,可在某個名稱前加上感嘆號,表示該狀態位是關閉的。
ttk.Widget?
除了以下方法之外,ttk.Widget 還支持 tkinter.Widget.cget() 和 tkinter.Widget.configure() 方法。
-
class
tkinter.ttk.Widget? -
identify(x, y)? 返回位于 x y 的控件名稱,如果該坐標點不屬于任何控件,則返回空字符串。
x 和 y 是控件內的相對坐標,單位是像素。
-
instate(statespec, callback=None, *args, **kw)? 檢測控件的狀態。如果沒有設置回調函數,那么當控件狀態符合 statespec 時返回
True,否則返回False。如果指定了回調函數,那么當控件狀態匹配 statespec 時將會調用回調函數,且帶上參數 args。
-
state(statespec=None)? 修改或查詢控件的狀態。如果給出了 statespec,則會設置控件的狀態,并返回一個新的*statespec*,表明哪些標志做過改動。如果未給出 statespec,則返回當前啟用的狀態標志。
statespec 通常是列表或元組類型。
-
組合框?
ttk.Combobox 控件是文本框和下拉列表的組合體。該控件是 Entry 的子類。
除了從 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() 方法,ttk.Combobox 還自帶了其他幾個方法。
選項?
控件可設置以下參數:
選項
描述
exportselection
布爾值,如果設為 True,則控件的選中文字將關聯為窗口管理器的選中文字(可由 Misc.selection_get 返回)。
justify
指定文本在控件中的對齊方式。可為 left、center、right 之一。
height
設置下拉列表框的高度。
postcommand
一條代碼,(可用 Misc.register 進行注冊),在顯示之前將被調用。可用于選取要顯示的值。
狀況
normal 、readonly 或 disabled。在 readonly 狀態下,數據不能直接編輯,用戶只能從下拉列表中選取。在 normal 狀態下,可直接編輯文本框。在 disabled 狀態下,無法做任何交互。
文本變量
設置一個變量名,其值與控件的值關聯。每當該變量對應的值發生變動時,控件值就會更新,反之亦然。參見
tkinter.StringVar。值
設置顯示于下拉列表中的值。
寬度
設置為整數值,表示輸入窗口的應有寬度,單位是字符單位(控件字體的平均字符寬度)。
虛擬事件?
當用戶從下拉列表中選擇某個元素時,控件會生成一條 <<ComboboxSelected>> 虛擬事件。
Spinbox?
ttk.Spinbox 控件是 ttk.Entry 的擴展,帶有增減箭頭。可用于數字或字符串列表。這是 Entry 的子類。
除了從 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 中都有介紹。
選項?
控件可設置以下參數:
選項 |
描述 |
|---|---|
從 |
浮點值。即遞減按鈕要遞減的最小值。作為參數使用時必須寫成 |
到 |
浮點值。即遞增按鈕能夠到達的最大值。 |
增加 |
浮點值。指定遞增/遞減按鈕每次的修改量。默認值為 1.0。 |
值 |
字符串或浮點值構成的序列。如若給出,則遞增/遞減會在此序列元素間循環,而不是增減數值。 |
wrap |
布爾值。若為 |
格式 |
字符串。指定遞增/遞減按鈕的數字格式。必須以“%W.Pf”的格式給出,W 是填充的寬度,P 是小數精度,% 和 f 就是本身的含義。 |
命令 |
Python 回調函數。只要遞增或遞減按鈕按下之后,就會進行不帶參數的調用。 |
虛擬事件?
用戶若按下 <Up> ,則控件會生成 <<Increment>> 虛擬事件,若按下 <Down> 則會生成 <<Decrement>> 事件。
筆記本?
Ttk Notebook 控件管理著多個窗口的集合,每次顯示其中的一個。每個子窗口都與某個 tab 關聯,可供用戶選中以改變當前顯示的窗口。
選項?
控件可設置以下參數:
選項
描述
height
如若給出且大于 0,則指定子窗口面板的應有高度(不含內部縮進)。否則會采用所有子窗口面板的最大高度。
padding
指定在控件外部添加的留白。padding 是最多包含四個值的列表,指定左頂右底的空間。如果給出的元素少于四個,底部值默認為頂部值,右側值默認為左側值,頂部值默認為左側值。
寬度
若給出且大于 0,則設置面板的應有寬度(不含內部 padding)。否則將采用所有子窗口面板的最大寬度。
Tab 選項?
Tab 特有屬性如下:
選項
描述
狀況
可為 normal、disabled 或 disabled 之一。若為 disabled 則不能選中。若為 hidden 則不會顯示。
sticky
指定子窗口在面板內的定位方式。應為包含零個或多個 n、s、e 、w 字符的字符串。每個字母表示子窗口應緊靠的方向(北、南、東或西),正如
grid()位置管理器所述。padding
指定控件和面板之間的留白空間。格式與本控件的 padding 屬性相同。
文本
指定顯示在 tab 上的文本。
圖片
指定顯示在 tab 上的圖片。參見
Widget的 image 屬性。compound
當文本和圖片同時存在時,指定圖片相對于文本的顯示位置。合法的屬性值參見 Label Options 。
下劃線
指定下劃線在文本字符串中的索引(基于0)。如果調用過了
Notebook.enable_traversal(),帶下劃線的字符將用于激活快捷鍵。
Tab 標識?
The tab_id present in several methods of ttk.Notebook may take any
of the following forms:
位于 0 和 tab 總數之間的整數值。
子窗口的名稱
以“@x,y”形式給出的位置,唯一標識了 tab 頁。
字符串“current”,標識當前選中的 Tab。
字符串字面值 "end",它返回標簽頁的數量 (僅適用于
Notebook.index())
虛擬事件?
當選中一個新 tab 頁之后,控件會生成一條 <<NotebookTabChanged>> 虛擬事件。
ttk.Notebook?
-
class
tkinter.ttk.Notebook? -
add(child, **kw)? 添加一個新 tab 頁。
如果窗口是由 Notebook 管理但處于隱藏狀態,則會恢復到之前的位置。
可用屬性請參見 Tab Options 。
-
forget(tab_id)? 刪除 tab_id 指定的 tab 頁,移除與其窗口的關聯。
-
hide(tab_id)? 隱藏 tab_id 指定的 tab 頁。
tab 頁不會顯示出來,但關聯的窗口仍接受 Notebook 的管理,其配置屬性會繼續保留。隱藏的 tab 頁可由
add()恢復。
-
identify(x, y)? 返回 tab 頁內位置為 x、y 的控件名稱,若不存在則返回空字符串。
-
index(tab_id)? 返回 tab_id 指定 tab 頁的索引值,如果 tab_id 為 end 則返回 tab 頁的總數。
-
insert(pos, child, **kw)? 在指定位置插入一個面板控件。
pos 可為字符串“end” 、整數索引值或子窗口名稱。如果 child 已由 Notebook 管理,則移至指定位置。
可用屬性請參見 Tab Options 。
-
select(tab_id=None)? 選中 tab_id 指定 tab。
顯示關聯的子窗口,之前選中的窗口將取消映射關系。如果省略 tab_id ,則返回當前選中面板的控件名稱。
-
tab(tab_id, option=None, **kw)? 查詢或修改 tab_id 指定 tab 的屬性。
如果未給出 kw ,則返回由 tab 屬性組成的字典。如果指定了 option,則返回其值。否則,設置屬性值。
-
tabs()? 返回 Notebook 管理的窗口列表。
-
enable_traversal()? 為包含 Notebook 的頂層窗口啟用鍵盤遍歷。
這將為包含 Notebook 的頂層窗口增加如下鍵盤綁定關系:
Control-Tab :將當前 tab 加入選中列表。
Shift-Control-Tab :選中當前 tab 之前的頁。
Alt-K :這里 K 是任意 tab 頁的快捷鍵(帶下劃線)字符,將會直接選中該 tab。
一個頂層窗口中可為多個 Notebook 啟用鍵盤遍歷,包括嵌套的 Notebook 。但僅當所有面板都將所在 Notebook 作為父控件時,鍵盤遍歷才會生效。
-
Progressbar?
ttk.Progressbar 控件可為長時間操作顯示狀態。可工作于兩種模式:1)確定模式,顯示相對完成進度;2)不確定模式,顯示動畫讓用戶知道工作正在進行中。
選項?
控件可設置以下參數:
選項
描述
orient
horizontal 或 vertical。指定進度條的顯示方向。
length
指定進度條長軸的長度(橫向為寬度,縱向則為高度)。
模式
determinate 或 indeterminate。
maximum
設定最大值。默認為 100。
值
進度條的當前值。在 determinate 模式下代表已完成的工作量。在 indeterminate 模式下,解釋為 maximum 的模;也就是說,當本值增至 maximum 時,進度條完成了一個“周期”。
variable
與屬性值關聯的變量名。若給出,則當變量值變化時會自動設為進度條的值。
phase
只讀屬性。只要值大于 0 且在 determinate 模式下小于最大值,控件就會定期增大該屬性值。當前主題可利用本屬性提供額外的動畫效果。
ttk.Progressbar?
-
class
tkinter.ttk.Progressbar? -
start(interval=None)? 啟動自動遞增模式:安排一個循環的定時器事件,每隔 interval 毫秒調用一次
Progressbar.step()。interval 可省略,默認為 50毫秒。
-
step(amount=None)? 將進度條的值增加 amount。
amount 可省略,默認為 1.0。
-
stop()? 停止自增模式:取消所有由
Progressbar.start()啟動的循環定時器事件。
-
Separator?
The ttk.Separator widget displays a horizontal or vertical separator
bar.
除由 ttk.Widget 繼承而來的方法外,沒有定義其他方法。
Sizegrip?
ttk.Sizegrip 控件允許用戶通過按下并拖動控制柄來調整內部頂層窗口的大小。
除由 ttk.Widget 繼承的之外,沒有其他屬性和方法。
與平臺相關的注意事項?
在 MacOS X 中,頂層窗口自動內置了大小控制柄。再加一個
Sizegrip也沒什么壞處,因為內置的控制柄會蓋住 Sizegrip 控件。
Bug?
假如內部的頂層窗口位置是相對于屏幕的右側或底部進行設置的,那么
Sizegrip控件將不會改變窗口的大小。僅支持東南方向的縮放。
Treeview?
ttk.Treeview 控件可將多項內容分層級顯示。每個數據項抖帶有一個文本標簽、一張圖片(可選)和一個數據列表(可選)。這些數據值將在樹標簽后面分列顯示。
數據值的顯示順序可用屬性 displaycolumns 進行控制。樹控件還可以顯示列標題。數據列可通過數字或名稱進行訪問,各列的名稱在屬性 columns 中列出。參閱 Column Identifiers。
每個數據項都由唯一名稱進行標識。如果調用者未提供數據項的 ID,樹控件會自動生成。根有且只有一個,名為 {}。根本身不會顯示出來;其子項將顯示在頂層。
每個數據項均帶有 tag 列表,可用于綁定事件及控制外觀。
Treeview 組件支持水平和垂直滾動,滾動時會依據 Scrollable Widget Options 描述的屬性和 Treeview.xview() 和 Treeview.yview() 方法。
選項?
控件可設置以下參數:
選項
描述
columns
列標識的列表,指定列的數量和名稱。
displaycolumns
列標識的列表(索引可為符號或整數),指定要顯示的數據列及顯示順序,或者字符串 “#all”。
height
指定可見的行數。注意:所需寬度由各列寬度之和決定。
padding
指定控件內部的留白。為不超過四個元素的長度列表。
selectmode
控制內部類如何進行選中項的管理。可為 extended、browse 或 none。若設為 extended(默認),則可選中多個項。若為 browse ,則每次只能選中一項。若為 none,則無法修改選中項。
請注意,代碼和 tag 綁定可自由進行選中操作,不受本屬性的限制。
show
由0個或下列值組成的列表,指定要顯示樹的哪些元素。
tree :在 #0 列顯示樹的文本標簽。
headings :顯示標題行。
默認為“tree headings”,顯示所有元素。
** 注意** :第 #0 列一定是指 tree 列,即便未設置 show="tree" 也一樣。
數據項的屬性?
可在插入和數據項操作時設置以下屬性。
選項
描述
文本
用于顯示的文本標簽。
圖片
Tk 圖片對象,顯示在文本標簽左側。
值
關聯的數據值列表。
每個數據項關聯的數據數量應與 columns 屬性相同。如果比 columns 屬性的少,剩下的值將視為空。如果多于 columns 屬性的,多余數據將被忽略。
open
True或False,表明是否顯示數據項的子樹。tags
與該數據項關聯的 tag 列表。
tag 屬性?
tag 可定義以下屬性:
選項
描述
foreground
定義文本前景色。
背景
定義單元格或數據項的背景色。
font
定義文本的字體。
圖片
定義數據項的圖片,當 image 屬性為空時使用。
列標識?
列標識可用以下格式給出:
由 columns 屬性給出的符號名。
整數值 n,指定第 n 列。
#n 的字符串格式,n 是整數,指定第 n 個顯示列。
注釋:
數據項屬性的顯示順序可能與存儲順序不一樣。
#0 列一定是指 tree 列,即便未指定 show="tree" 也是一樣。
數據列號是指屬性值列表中的索引值,顯示列號是指顯示在樹控件中的列號。樹的文本標簽將顯示在 #0 列。如果未設置 displaycolumns 屬性,則數據列 n 將顯示在第 #n+1 列。再次強調一下,#0 列一定是指 tree 列 。
虛擬事件?
Treeview 控件會生成以下虛擬事件。
Event
描述
<<TreeviewSelect>>
當選中項發生變化時生成。
<<TreeviewOpen>>
當焦點所在項的 open= True 時立即生成。
<<TreeviewClose>>
當焦點所在項的 open= True 之后立即生成。
Treeview.focus() 和 Treeview.selection() 方法可用于確認涉及的數據項。
ttk.Treeview?
-
class
tkinter.ttk.Treeview? -
bbox(item, column=None)? 返回某 數據項 的邊界(相對于控件窗口的坐標),形式為 (x, y, width, height) 。
若給出了 column,則返回該單元格的邊界。若該 數據項 不可見(即從屬于已關閉項或滾動至屏幕外),則返回空字符串。
-
get_children(item=None)? 返回從屬于 item 的下級數據項列表。
若未給出 item ,則返回根的下級。
-
set_children(item, *newchildren)? 用 newchildren 替換 item 的下級數據。
對于 item 中存在而 newchildren 中不存在的數據項,會從樹中移除。newchildren 中的數據不能是 item 的上級。注意,未給出 newchildren 會導致 item 的子項被移除。
-
column(column, option=None, **kw)? 查詢或修改 column 的屬性。
如果未給出 kw,則返回屬性值的字典。若指定了 option,則會返回該屬性值。否則將設置屬性值。
合法的 屬性/值 可為:
- id
返回列名。這是只讀屬性。
- anchor:標準的 Tk 錨點值。
指定該列的文本在單元格內的對齊方式。
- minwidth:寬度。
列的最小寬度,單位是像素。在縮放控件或用戶拖動某一列時,Treeview 會保證列寬不小于此值。
- stretch:
True/False 指明列寬度是否應該在部件大小被改變時進行相應的調整。
- stretch:
- width: width
以像素表示的列寬度。
要配置樹的列,則調用此方法并附帶參數 column = "#0"
-
delete(*items)? 刪除所有 items 及其下屬。
根不能刪除。
-
detach(*items)? 將所有 items 與樹解除關聯。
數據項及其下屬依然存在,后續可以重新插入,目前只是不顯示出來。
根不能解除關聯。
-
exists(item)? 如果給出的 item 位于樹中,則返回
True。
-
focus(item=None)? 如果給出 item 則設為當前焦點。否則返回當前焦點所在數據項,若無則返回 ''。
-
heading(column, option=None, **kw)? 查詢或修改某 column 的標題。
若未給出 kw,則返回列標題組成的列表。若給出了 option 則返回對應屬性值。否則,設置屬性值。
合法的 屬性/值 可為:
- text:文本。
顯示為列標題的文本。
- image:圖片名稱
指定顯示在列標題右側的圖片。
- anchor:錨點
指定列標題文本的對齊方式。應為標準的 Tk 錨點值。
- command:回調函數
點擊列標題時執行的回調函數。
若要對 tree 列進行設置,請帶上 column = "#0" 進行調用。
-
identify(component, x, y)? 返回 x、y 位置上 component 控件的描述信息,如果此處沒有這種控件,則返回空字符串。
-
identify_row(y)? 返回 y 位置上的數據項 ID。
-
identify_column(x)? 返回 x 位置上的單元格所在的數據列 ID。
tree 列的 ID 為 #0 。
-
identify_region(x, y)? 返回以下值之一:
region
區域
標題欄
樹的標題欄區域。
heading
兩個列標題之間的間隔區域。
tree
樹區域。
cell
數據單元格。
可用性:Tk 8.6。
-
identify_element(x, y)? 返回位于 x 、y 的數據項。
可用性:Tk 8.6。
-
index(item)? 返回 item 在其數據項列表中的整數索引。
-
insert(parent, index, iid=None, **kw)? 新建一個數據項并返回其 ID。
parent 是父項的 ID,若要新建頂級項則為空字符串。 index 是整數或“end”,指明在父項的子項列表中的插入位置。如果 index 小于等于0,則在開頭插入新節點;如果 index 大于或等于當前子節點數,則將其插入末尾。如果給出了 iid,則將其用作數據項 ID; iid 不得存在于樹中。否則會新生成一個唯一 ID。
此處可設置的屬性請參閱 Item Options 。
-
item(item, option=None, **kw)? 查詢或修改某 item 的屬性。
如果未給出 option,則返回屬性/值構成的字典。如果給出了 option,則返回該屬性的值。否則,將屬性設為 kw 給出的值。
-
move(item, parent, index)? 將 item 移至指定位置,父項為 parent ,子項列表索引為 index 。
將數據項移入其子項之下是非法的。如果 index 小于等于0,item 將被移到開頭;如果大于等于子項的總數,則被移至最后。如果 item 已解除關聯,則會被重新連接。
-
next(item)? 返回 item 的下一個相鄰項,如果 item 是父項的最后一個子項,則返回 ''。
-
parent(item)? 返回 item 的父項 ID,如果 item 為頂級節點,則返回 ''。
-
prev(item)? 返回 item 的前一個相鄰項,若 item 為父項的第一個子項,則返回 ''。
-
reattach(item, parent, index)? Treeview.move()的別名。
-
see(item)? 確保 item 可見。
將 item 所有上級的 open 屬性設為
True,必要時會滾動控件,讓 item 處于樹的可見部分。
-
selection(selop=None, items=None)? If selop is not specified, returns selected items. Otherwise, it will act according to the following selection methods.
Deprecated since version 3.6, will be removed in version 3.8: Using
selection()for changing the selection state is deprecated. Use the following selection methods instead.
-
selection_set(*items)? 讓 items 成為新的選中項。
在 3.6 版更改: items 可作為多個單獨的參數傳遞,而不是作為一個元組。
-
selection_add(*items)? 將 items 加入選中項。
在 3.6 版更改: items 可作為多個單獨的參數傳遞,而不是作為一個元組。
-
selection_remove(*items)? 從選中項中移除 items?。
在 3.6 版更改: items 可作為多個單獨的參數傳遞,而不是作為一個元組。
-
selection_toggle(*items)? 切換 items 中各項的選中狀態。
在 3.6 版更改: items 可作為多個單獨的參數傳遞,而不是作為一個元組。
-
set(item, column=None, value=None)? 若帶一個參數,則返回指定 item 的列/值字典。若帶兩個參數,則返回 column 的當前值。若帶三個參數,則將 item 的 column 設為 value。
-
tag_bind(tagname, sequence=None, callback=None)? 為 tag 為 tagname 的數據項綁定事件 sequence 的回調函數。當事件分發給該數據項時,tag 參數為 tagname 的全部數據項的回調都會被調用到。
-
tag_configure(tagname, option=None, **kw)? 查詢或修改 tagname 指定項的參數。
如果給出了 kw,則返回 tagname 項的屬性字典。如果給出了 option,則返回 tagname 項的 option 屬性值。否則,設置 tagname 項的屬性值。
-
tag_has(tagname, item=None)? 如果給出了 item ,則依據 item 是否具備 tagname 而返回 1 或 0。否則,返回 tag 為 tagname?的所有數據項構成的列表。
可用性:Tk 8.6。
-
xview(*args)? 查詢或修改 Treeview 的橫向位置。
-
yview(*args)? 查詢或修改 Treeview 的縱向位置。
-
Ttk 風格?
ttk 的每種控件都賦有一個樣式,指定了控件內的元素及其排列方式,以及元素屬性的動態和默認設置。默認情況下,樣式名與控件的類名相同,但可能會被控件的 style 屬性覆蓋。如果不知道控件的類名,可用 Misc.winfo_class() 方法獲取(somewidget.winfo_class())。
-
class
tkinter.ttk.Style? 用于操控風格數據庫的類。
-
configure(style, query_opt=None, **kw)? 查詢或設置 style 的默認參數。
Each key in kw is an option and each value is a string identifying the value for that option.
例如,要將默認按鈕改為扁平樣式,并帶有留白和各種背景色:
from tkinter import ttk import tkinter root = 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)? 查詢或設置 style 的指定屬性的動態值。
kw 的每個鍵都是一個屬性,每個值通常應為列表或元組,其中包含以元組、列表或其他形式組合而成的狀態標識(statespec)。狀態標識是由一個或多個狀態組合,加上一個值組成。
舉個例子能更清晰些:
import tkinter from tkinter import ttk root = 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()
請注意,要點是屬性的(狀態,值)序列的順序,如果前景色屬性的順序改為
[('active', 'blue'), ('pressed', 'red')],則控件處于激活或按下狀態時的前景色將為藍色。
-
lookup(style, option, state=None, default=None)? 返回 style 中的 option?屬性值。
如果給出了 state ,則應是一個或多個狀態組成的序列。如果設置了 default 參數,則在屬性值缺失時會用作后備值。
若要檢測按鈕的默認字體,可以:
from tkinter import ttk print(ttk.Style().lookup("TButton", "font"))
-
layout(style, layoutspec=None)? 按照 style 定義控件布局。如果省略了 layoutspec,則返回該樣式的布局屬性。
若給出了 layoutspec,則應為一個列表或其他的序列類型(不包括字符串),其中的數據項應為元組類型,第一項是布局名稱,第二項的格式應符合 Layouts 的描述。
以下示例有助于理解這種格式(這里并沒有實際意義):
from tkinter import ttk import tkinter root = 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)? 在當前主題中創建一個新元素 etype ,應為 image、from 或 vsapi。后者僅在 Windows XP 和 Vista 版的 Tk 8.6a 中可用,此處不再贅述。
如果用了 image,則 args 應包含默認的圖片名,后面跟著 狀態標識/值(這里是 imagespec),kw 可帶有以下屬性:
- border=padding
padding 是由不超過四個整數構成的列表,分別定義了左、頂、右、底的邊界。
- height=height
定義了元素的最小高度。如果小于零,則默認采用圖片本身的高度。
- padding=padding
定義了元素的內部留白。若未指定則默認采用 border 值。
- sticky=spec
定義了圖片的對齊方式。spec 包含零個或多個 n、s、w、e 字符。
- width=width
定義了元素的最小寬度。如果小于零,則默認采用圖片本身的寬度。
如果 etype 的值用了 from,則
element_create()將復制一個現有的元素。 args 應包含主題名和可選的要復制的元素。若未給出要克隆的元素,則采用空元素。 kw 參數將被丟棄。
-
element_names()? 返回當前主題已定義的元素列表 。
-
element_options(elementname)? 返回 elementname 的屬性列表。
-
theme_create(themename, parent=None, settings=None)? 新建一個主題。
如果 themename 已經存在,則會報錯。如果給出了 parent,則新主題將從父主題繼承樣式、元素和布局。若給出了 settings ,則語法應與
theme_settings()的相同。
-
theme_settings(themename, settings)? 將當前主題臨時設為 themename,并應用 settings,然后恢復之前的主題。
settings 中的每個鍵都是一種樣式而每個值可能包含 'configure', 'map', 'layout' 和 'element create' 等鍵并且它們被預期具有與分別由
Style.configure(),Style.map(),Style.layout()和Style.element_create()方法所指定的相符的格式。以下例子會對 Combobox 的默認主題稍作修改:
from tkinter import ttk import tkinter root = 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,則返回正在使用的主題。否則,將當前主題設為 themename,刷新所有控件并引發 <<ThemeChanged>> 事件。
-
布局?
布局在沒有屬性時可以為 None ,或是定義了元素排列方式的屬性字典。布局機制采用了位置管理器的簡化版本:給定一個初始容器(cavity),為每個元素都分配一個包裝(parcel)。合法的選項/值包括:
- side: whichside
指定元素置于容器的哪一側; 頂、右、底或左。如果省略,則該元素將占據整個容器。
- sticky: nswe
指定元素在已分配包裝盒內的放置位置。
- unit: 0 或 1
如果設為 1,則將元素及其所有后代均視作單個元素以供
Widget.identify()等使用。 它被用于滾動條之類帶有控制柄的東西。
- children: [sublayout... ]
指定要放置于元素內的元素列表。每個元素都是一個元組(或其他序列類型),其中第一項是布局名稱,另一項是個 Layout 。
