tkinter.ttk — Tk 主題化小部件

原始碼: Lib/tkinter/ttk.py


tkinter.ttk 模組提供了對 Tk 主題化小部件集的訪問,該小部件集在 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, ScaleScrollbar) 自動替換 Tk 小部件。

這直接受益於使用新小部件,可在不同平臺提供更好的外觀和感覺;然而,替換的小部件並非完全相容。主要區別在於,小部件選項(如“fg”、“bg”以及其他與小部件樣式相關的選項)在 Ttk 小部件中不再存在。相反,請使用 ttk.Style 類以獲得改進的樣式效果。

參見

將現有應用程式轉換為使用 Tile 小部件

一篇關於將應用程式遷移到新小部件時通常遇到的差異的專著(使用 Tcl 術語)。

Ttk 小部件

Ttk 提供了 18 個小部件,其中 12 個已經存在於 tkinter 中:Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale, Scrollbar, 和 Spinbox。其他六個是新的:Combobox, Notebook, Progressbar, Separator, SizegripTreeview。所有這些都是 Widget 的子類。

使用 Ttk 小部件可以改善應用程式的外觀和感覺。如上所述,樣式編碼方式存在差異。

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 小部件都接受以下選項

選項

描述

指定視窗類。在查詢選項資料庫以獲取視窗的其他選項時,用於確定視窗的預設繫結標籤,並選擇小部件的預設佈局和樣式。此選項是隻讀的,只能在建立視窗時指定。

cursor

指定小部件要使用的滑鼠游標。如果設定為空字串(預設值),則游標將從父小部件繼承。

takefocus

確定視窗是否在鍵盤遍歷期間接受焦點。返回 0、1 或空字串。如果返回 0,表示視窗應在鍵盤遍歷期間完全跳過。如果返回 1,表示視窗只要可見就應接收輸入焦點。空字串表示遍歷指令碼決定是否將焦點放在視窗上。

風格

可用於指定自定義小部件樣式。

可滾動小部件選項

由捲軸控制的小部件支援以下選項。

選項

描述

xscrollcommand

用於與水平捲軸通訊。

當小部件視窗中的檢視改變時,小部件將根據 scrollcommand 生成一個 Tcl 命令。

通常,此選項由某些捲軸的 Scrollbar.set() 方法組成。這將導致捲軸在視窗檢視更改時進行更新。

yscrollcommand

用於與垂直捲軸通訊。更多資訊請參見上文。

標籤選項

標籤、按鈕和其他類似按鈕的小部件支援以下選項。

選項

描述

text

指定要在小部件內部顯示的文字字串。

textvariable

指定一個名稱,其值將代替 text 選項資源使用。

underline

如果設定,指定文字字串中要下劃線的字元索引(0-based)。下劃線字元用於助記啟用。

image

指定要顯示的影像。這是一個包含 1 個或多個元素的列表。第一個元素是預設影像名稱。列表的其餘部分是狀態規範/值對的序列,由 Style.map() 定義,指定當小部件處於特定狀態或狀態組合時要使用的不同影像。列表中所有影像的大小應相同。

複合

如果同時存在 text 和 images 選項,則指定影像相對於文字的顯示方式。有效值為

  • text: 僅顯示文字

  • image: 僅顯示影像

  • top, bottom, left, right: 分別在文字上方、下方、左側或右側顯示影像。

  • none: 預設值。如果存在影像則顯示影像,否則顯示文字。

width

如果大於零,指定為文字標籤分配的字元寬度空間;如果小於零,指定最小寬度。如果為零或未指定,則使用文字標籤的自然寬度。

相容性選項

選項

描述

state

可以設定為“normal”或“disabled”以控制“disabled”狀態位。這是一個只寫選項:設定它會改變小部件狀態,但 Widget.state() 方法不影響此選項。

小部件狀態

小部件狀態是一個由獨立狀態標誌組成的點陣圖。

Flag

描述

active

滑鼠游標懸停在小部件上,按下滑鼠按鈕將觸發某些操作

disabled

小部件在程式控制下停用

focus

小部件具有鍵盤焦點

pressed

小部件正在被按下

selected

對於 Checkbuttons 和 radiobuttons 等,表示“開”、“真”或“當前”

background

Windows 和 Mac 有“活動”或前臺視窗的概念。背景狀態設定為背景視窗中的小部件,併為前臺視窗中的小部件清除

readonly

小部件不應允許使用者修改

alternate

小部件特定的備用顯示格式

invalid

小部件的值無效

狀態規範是狀態名稱的序列,可以選擇以感嘆號作為字首,表示該位為關閉狀態。

ttk.Widget

除了下面描述的方法外,ttk.Widget 還支援 tkinter.Widget.cget()tkinter.Widget.configure() 方法。

class tkinter.ttk.Widget
identify(x, y)

返回位於位置 x y 的元素的名稱,如果該點不位於任何元素內,則返回空字串。

xy 是相對於小部件的畫素座標。

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

布林值。如果設定,小部件選擇將連結到視窗管理器選擇(例如,可以透過呼叫 Misc.selection_get 返回)。

justify

指定文字在小部件內的對齊方式。“left”、“center”或“right”之一。

height

指定彈出列表框的高度,以行數表示。

postcommand

一個指令碼(可能已使用 Misc.register 註冊),在顯示值之前立即呼叫。它可以指定要顯示的值。

state

“normal”、“readonly”或“disabled”之一。在“readonly”狀態下,值不能直接編輯,使用者只能從下拉列表中選擇值。在“normal”狀態下,文字欄位可以直接編輯。在“disabled”狀態下,無法進行任何互動。

textvariable

指定一個名稱,其值連結到小部件值。每當與該名稱關聯的值改變時,小部件值都會更新,反之亦然。參見 tkinter.StringVar

指定要在下拉列表框中顯示的值列表。

width

指定一個整數值,表示輸入視窗的期望寬度,以小部件字型平均大小字元為單位。

虛擬事件

當用戶從值列表中選擇一個元素時,組合框小部件會生成一個 <<ComboboxSelected>> 虛擬事件。

ttk.Combobox

class tkinter.ttk.Combobox
current(newindex=None)

如果指定 newindex,則將組合框值設定為元素位置 newindex。否則,返回當前值的索引,如果當前值不在值列表中,則返回 -1。

get()

返回組合框的當前值。

set(value)

將組合框的值設定為 value

旋轉框

ttk.Spinbox 小部件是一個透過增量和減量箭頭增強的 ttk.Entry。它可以用於數字或字串值列表。此小部件是 Entry 的子類。

除了繼承自 Widget 的方法:Widget.cget(), Widget.configure(), Widget.identify(), Widget.instate()Widget.state(),以及繼承自 Entry 的以下方法:Entry.bbox(), Entry.delete(), Entry.icursor(), Entry.index(), Entry.insert(), Entry.xview(),它還有一些其他方法,在 ttk.Spinbox 中描述。

選項

此小部件接受以下特定選項

選項

描述

from

浮點值。如果設定,這是遞減按鈕將遞減到的最小值。當用作引數時,必須拼寫為 from_,因為 from 是 Python 關鍵字。

to

浮點值。如果設定,這是遞增按鈕將遞增到的最大值。

increment

浮點值。指定增量/減量按鈕改變值的數量。預設為 1.0。

字串或浮點值序列。如果指定,增量/減量按鈕將在此序列中的項之間迴圈,而不是遞增或遞減數字。

wrap

布林值。如果為 True,則增量和減量按鈕將分別從 to 值迴圈到 from 值,或從 from 值迴圈到 to 值。

format

字串值。這指定了增量/減量按鈕設定的數字格式。它必須是“%W.Pf”的形式,其中 W 是值的填充寬度,P 是精度,“%”和“f”是字面量。

command

Python 可呼叫物件。每當增量或減量按鈕被按下時,將無引數呼叫它。

虛擬事件

當用戶按下 <Up> 時,旋轉框小部件會生成一個 <<Increment>> 虛擬事件;當用戶按下 <Down> 時,會生成一個 <<Decrement>> 虛擬事件。

ttk.Spinbox

class tkinter.ttk.Spinbox
get()

返回旋轉框的當前值。

set(value)

將旋轉框的值設定為 value

筆記本

Ttk Notebook 小部件管理一組視窗,並一次顯示一個。每個子視窗都與一個選項卡關聯,使用者可以選擇該選項卡來更改當前顯示的視窗。

選項

此小部件接受以下特定選項

選項

描述

height

如果存在且大於零,指定窗格區域的期望高度(不包括內部填充或選項卡)。否則,使用所有窗格的最大高度。

padding

指定在筆記本外部新增的額外空間量。填充是一個最多四個長度規格的列表:左、上、右、下。如果指定的元素少於四個,則底部預設為上,右預設為左,上預設為左。

width

如果存在且大於零,指定窗格區域的期望寬度(不包括內部填充)。否則,使用所有窗格的最大寬度。

選項卡選項

選項卡也有特定的選項

選項

描述

state

“normal”、“disabled”或“hidden”之一。如果為“disabled”,則選項卡不可選。如果為“hidden”,則選項卡不顯示。

sticky

指定子視窗在窗格區域內的定位方式。值是一個包含零個或多個字元“n”、“s”、“e”或“w”的字串。每個字母表示子視窗將粘附的一側(北、南、東或西),如 grid() 幾何管理器所示。

padding

指定在筆記本和此窗格之間新增的額外空間量。語法與此小部件使用的 padding 選項相同。

text

指定要在選項卡中顯示的文字。

image

指定要在選項卡中顯示的影像。參見 Widget 中描述的 image 選項。

複合

在 text 和 image 選項都存在的情況下,指定影像相對於文字的顯示方式。有關合法值,請參見 標籤選項

underline

指定文字字串中要下劃線的字元索引(0-based)。如果呼叫了 Notebook.enable_traversal(),下劃線字元將用於助記啟用。

選項卡識別符號

ttk.Notebook 的幾個方法中出現的 tab_id 可以採用以下任何形式

  • 一個介於零和選項卡數量之間的整數

  • 子視窗的名稱

  • 形式為“@x,y”的位置規範,用於標識選項卡

  • 字面字串“current”,用於標識當前選定的選項卡

  • 字面字串“end”,返回選項卡數量(僅對 Notebook.index() 有效)

虛擬事件

此小部件在新選項卡被選中後會生成一個 <<NotebookTabChanged>> 虛擬事件。

ttk.Notebook

class tkinter.ttk.Notebook
add(child, **kw)

向筆記本新增一個新選項卡。

如果視窗當前由筆記本管理但已隱藏,則將其恢復到以前的位置。

有關可用選項的列表,請參見 選項卡選項

forget(tab_id)

移除由 tab_id 指定的選項卡,取消對映並取消管理關聯的視窗。

hide(tab_id)

隱藏由 tab_id 指定的選項卡。

選項卡將不會顯示,但關聯的視窗仍由筆記本管理,其配置仍被記住。隱藏的選項卡可以使用 add() 命令恢復。

identify(x, y)

返回位於位置 x, y 的選項卡元素的名稱,如果沒有則返回空字串。

index(tab_id)

返回由 tab_id 指定的選項卡的數字索引,如果 tab_id 是字串“end”,則返回選項卡的總數。

insert(pos, child, **kw)

在指定位置插入一個窗格。

pos 是字串“end”、整數索引或受管子項的名稱。如果 child 已由筆記本管理,則將其移動到指定位置。

有關可用選項的列表,請參見 選項卡選項

select(tab_id=None)

選擇指定的 tab_id

關聯的子視窗將被顯示,先前選定的視窗(如果不同)將被取消對映。如果省略 tab_id,則返回當前選定窗格的小部件名稱。

tab(tab_id, option=None, **kw)

查詢或修改指定 tab_id 的選項。

如果未給出 kw,則返回選項卡選項值的字典。如果指定了 option,則返回該 option 的值。否則,將選項設定為相應的值。

tabs()

返回筆記本管理的視窗列表。

enable_traversal()

為此筆記本所在的頂級視窗啟用鍵盤遍歷。

這將擴充套件包含此筆記本的頂級視窗的繫結,如下所示

  • Control-Tab: 選擇當前選定選項卡後的選項卡。

  • Shift-Control-Tab: 選擇當前選定選項卡前的選項卡。

  • Alt-K: 其中 K 是任何選項卡的助記符(下劃線)字元,將選擇該選項卡。

單個頂級視窗中的多個筆記本可以啟用遍歷,包括巢狀筆記本。但是,筆記本遍歷僅在所有窗格都以其所在的筆記本作為主窗格時才能正常工作。

進度條

ttk.Progressbar 小部件顯示長時間執行操作的狀態。它可以在兩種模式下執行:1) 確定模式,顯示已完成的工作量相對於總工作量的百分比;2) 不確定模式,提供動畫顯示以告知使用者工作正在進行。

選項

此小部件接受以下特定選項

選項

描述

orient

“horizontal”或“vertical”之一。指定進度條的方向。

length

指定進度條長軸的長度(如果水平,則為寬度;如果垂直,則為高度)。

mode

“determinate”或“indeterminate”之一。

maximum

一個數字,指定最大值。預設為 100。

value (值)

進度條的當前值。在“determinate”模式下,這表示已完成的工作量。在“indeterminate”模式下,它被解釋為 maximum 的模;也就是說,當其值增加 maximum 時,進度條完成一個“迴圈”。

variable (變數)

一個連結到選項值的名稱。如果指定,每當此名稱的值被修改時,進度條的值將自動設定為此名稱的值。

phase

只讀選項。當其值大於 0 且在確定模式下小於最大值時,小部件會定期增加此選項的值。當前主題可以使用此選項提供額外的動畫效果。

ttk.Progressbar

class tkinter.ttk.Progressbar
start(interval=None)

開始自動遞增模式:排程一個重複計時器事件,該事件每隔 interval 毫秒呼叫一次 Progressbar.step()。如果省略 interval,則預設為 50 毫秒。

step(amount=None)

將進度條的值增加 amount

如果省略 amount,則預設為 1.0。

stop()

停止自動遞增模式:取消由 Progressbar.start() 為此進度條啟動的任何重複計時器事件。

分隔符

ttk.Separator 小部件顯示一個水平或垂直分隔條。

除了繼承自 ttk.Widget 的方法外,它沒有其他方法。

選項

此小部件接受以下特定選項

選項

描述

orient

“horizontal”或“vertical”之一。指定分隔符的方向。

大小調整手柄

ttk.Sizegrip 小部件(也稱為可調整大小框)允許使用者透過按住並拖動手柄來調整包含頂級視窗的大小。

除了繼承自 ttk.Widget 的方法外,此小部件沒有特定的選項或方法。

平臺特定說明

  • 在 macOS 上,頂級視窗預設自動包含一個內建的大小調整手柄。Sizegrip 的新增是無害的,因為內建手柄只會遮蓋小部件。

錯誤

  • 如果包含頂級視窗的位置是相對於螢幕的右側或底部指定的(例如...),則 Sizegrip 小部件將不會調整視窗大小。

  • 此小部件僅支援“東南”方向調整大小。

樹檢視

ttk.Treeview 小部件顯示專案的分層集合。每個專案都有一個文字標籤、一個可選影像和一個可選的資料值列表。資料值顯示在樹標籤後的後續列中。

資料值的顯示順序可以透過設定小部件選項 displaycolumns 來控制。樹形小部件還可以顯示列標題。列可以透過數字或小部件選項 columns 中列出的符號名稱訪問。參見 列識別符號

每個專案都由一個唯一的名稱標識。如果呼叫者未提供專案 ID,小部件將生成專案 ID。有一個特殊的根專案,名為 {}。根專案本身不顯示;其子項出現在層次結構的頂層。

每個專案還帶有一個標籤列表,可用於將事件繫結與單個專案關聯,並控制專案的外觀。

Treeview 小部件支援水平和垂直滾動,具體取決於 可滾動小部件選項 中描述的選項以及 Treeview.xview()Treeview.yview() 方法。

選項

此小部件接受以下特定選項

選項

描述

columns

列識別符號列表,指定列數及其名稱。

displaycolumns

列識別符號(符號或整數索引)列表,指定顯示哪些資料列及其出現順序,或字串“#all”。

height

指定應可見的行數。注意:請求的寬度由列寬之和確定。

padding

指定小部件的內部填充。填充是一個最多包含四個長度規格的列表。

selectmode

控制內建類繫結如何管理選擇。“extended”、“browse”或“none”之一。如果設定為“extended”(預設值),則可以同時選擇多個專案。如果為“browse”,則一次只能選擇一個專案。如果為“none”,則不會更改選擇。

請注意,應用程式程式碼和標籤繫結可以根據需要設定選擇,無論此選項的值如何。

show

包含零個或多個以下值的列表,指定要顯示樹的哪些元素。

  • tree: 在 #0 列顯示樹標籤。

  • headings: 顯示標題行。

預設值為“tree headings”,即顯示所有元素。

注意:列 #0 總是指樹列,即使未指定 show=”tree”。

專案選項

以下專案選項可用於 insert 和 item 小部件命令中的專案。

選項

描述

text

要為專案顯示的文字標籤。

image

一個 Tk 影像,顯示在標籤的左側。

與專案關聯的值列表。

每個專案的價值數量應與小部件選項中的列數相同。如果價值數量少於列數,則其餘價值假定為空。如果價值數量多於列數,則忽略多餘的價值。

開啟

True/False 值,指示是否應顯示或隱藏該專案的子項。

tags

與此專案關聯的標籤列表。

標籤選項

以下選項可用於標籤

選項

描述

foreground

指定文字前景色。

background

指定單元格或專案的背景顏色。

font

指定繪製文字時使用的字型。

image

指定專案影像,如果專案的 image 選項為空。

列識別符號

列標識符采用以下任何形式

  • 來自列選項列表中的一個符號名稱。

  • 一個整數 n,指定第 n 個數據列。

  • 形式為 #n 的字串,其中 n 是一個整數,指定第 n 個顯示列。

備註

  • 專案的選項值可能以與儲存順序不同的順序顯示。

  • 列 #0 總是指樹列,即使未指定 show=”tree”。

資料列號是專案選項值列表中的索引;顯示列號是樹中顯示值的列號。樹標籤顯示在列 #0 中。如果未設定選項 displaycolumns,則資料列 n 顯示在列 #n+1 中。再次強調,列 #0 總是指樹列

虛擬事件

Treeview 小部件生成以下虛擬事件。

事件

描述

<<TreeviewSelect>>

選擇更改時生成。

<<TreeviewOpen>>

在將焦點項設定為 open=True 之前生成。

<<TreeviewClose>>

在將焦點項設定為 open=False 之後生成。

Treeview.focus()Treeview.selection() 方法可用於確定受影響的專案。

ttk.Treeview

class tkinter.ttk.Treeview
bbox(item, column=None)

返回指定 item 在樹檢視小部件視窗中的邊界框,格式為 (x, y, width, height)。

如果指定了 column,則返回該單元格的邊界框。如果 item 不可見(即,如果它是已關閉項的後代或已滾動出螢幕),則返回空字串。

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,則返回該 option 的值。否則,將選項設定為相應的值。

有效選項/值為

id

返回列名。這是一個只讀選項。

anchor: 標準 Tk 錨點值之一。

指定此列中的文字應相對於單元格如何對齊。

minwidth: 寬度

列的最小寬度(以畫素為單位)。當小部件調整大小或使用者拖動列時,樹檢視小部件不會使列小於此選項指定的值。

stretch: True/False

指定小部件調整大小時是否應調整列寬。

width: 寬度

列的寬度(以畫素為單位)。

要配置樹列,請將 column = “#0” 呼叫此方法

delete(*items)

刪除所有指定的 items 及其所有後代。

根專案不能刪除。

detach(*items)

將所有指定的 items 從樹中解除連結。

專案及其所有後代仍然存在,可以重新插入到樹中的另一個位置,但不會顯示。

根項不能分離。

exists(item)

如果指定的 item 存在於樹中,則返回 True

focus(item=None)

如果指定了 item,則將焦點項設定為 item。否則,返回當前焦點項,如果沒有則返回 ''。

heading(column, option=None, **kw)

查詢或修改指定 column 的標題選項。

如果未給出 kw,則返回標題選項值的字典。如果指定了 option,則返回該 option 的值。否則,將選項設定為相應的值。

有效選項/值為

text: 文字

要在列標題中顯示的文字。

image: 影像名稱

指定在列標題右側顯示的影像。

anchor: 錨點

指定標題文字的對齊方式。標準 Tk 錨點值之一。

command: 回撥

按下標題標籤時呼叫的回撥函式。

要配置樹列標題,請使用 column = “#0” 呼叫此方法。

identify(component, x, y)

返回指定 componentxy 給定點下的描述,如果該位置沒有此類 component,則返回空字串。

identify_row(y)

返回位置 y 處專案的專案 ID。

identify_column(x)

返回位置 x 處單元格的資料列識別符號。

樹列的 ID 為 #0。

identify_region(x, y)

返回以下之一

region

含義

heading

樹標題區域。

separator

兩列標題之間的空間。

tree

樹形區域。

cell

資料單元格。

可用性:Tk 8.6。

identify_element(x, y)

返回位置 x, y 處的元素。

可用性:Tk 8.6。

index(item)

返回 item 在其父級子項列表中的整數索引。

insert(parent, index, iid=None, **kw)

建立一個新專案並返回新建立專案的專案識別符號。

parent 是父專案的專案 ID,或空字串以建立新的頂級專案。index 是一個整數,或值“end”,指定在新專案的父項子項列表中的插入位置。如果 index 小於或等於零,則新節點插入到開頭;如果 index 大於或等於當前子項數,則插入到末尾。如果指定了 iid,則將其用作專案識別符號;iid 不得已存在於樹中。否則,將生成一個新的唯一識別符號。

有關可用選項的列表,請參見 專案選項

item(item, option=None, **kw)

查詢或修改指定 item 的選項。

如果沒有給出任何選項,則返回一個包含該專案選項/值的字典。如果指定了 option,則返回該選項的值。否則,將選項設定為 kw 給出的相應值。

move(item, parent, index)

item 移動到 parent 的子項列表中的 index 位置。

將專案移動到其某個後代之下是非法的。如果 index 小於或等於零,則將 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()

返回一個選定專案的元組。

在 3.8 版本中更改: selection() 不再接受引數。要更改選擇狀態,請使用以下選擇方法。

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)

為給定事件 sequence 繫結回撥函式到標籤 tagname。當事件傳遞到專案時,將呼叫專案每個標籤選項的回撥函式。

tag_configure(tagname, option=None, **kw)

查詢或修改指定 tagname 的選項。

如果未給出 kw,則返回 tagname 的選項設定字典。如果指定了 option,則返回指定 tagname 的該 option 的值。否則,將選項設定為給定 tagname 的相應值。

tag_has(tagname, item=None)

如果指定了 item,則根據指定 item 是否具有給定 tagname 返回 1 或 0。否則,返回所有具有指定標籤的專案的列表。

可用性:Tk 8.6

xview(*args)

查詢或修改樹檢視的水平位置。

yview(*args)

查詢或修改樹檢視的垂直位置。

Ttk 樣式

ttk 中的每個小部件都被分配一個樣式,該樣式指定構成小部件的元素集及其排列方式,以及元素選項的動態和預設設定。預設情況下,樣式名稱與小部件的類名相同,但可以透過小部件的 style 選項覆蓋。如果您不知道小部件的類名,請使用方法 Misc.winfo_class() (somewidget.winfo_class())。

參見

Tcl'2004 會議演示

本文件解釋了主題引擎的工作原理

class tkinter.ttk.Style

此類用於操作樣式資料庫。

configure(style, query_opt=None, **kw)

查詢或設定 style 中指定選項的預設值。

kw 中的每個鍵都是一個選項,每個值都是一個字串,用於標識該選項的值。

例如,要將每個預設按鈕更改為帶有填充和不同背景顏色的扁平按鈕

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 中的每個鍵都是一個選項,每個值都應該是一個列表或(通常)一個元組,其中包含按元組、列表或其他首選項分組的狀態規範。狀態規範是一個或多個狀態的複合體,然後是一個值。

一個例子可能使其更易理解

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()

請注意,對於某個選項,(states, value) 序列的順序確實很重要,例如,如果前景選項的順序更改為 [('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,則預期它是一個列表或某些其他序列型別(不包括字串),其中每個專案都應該是一個元組,第一個專案是佈局名稱,第二個專案應該具有 佈局 中描述的格式。

要了解格式,請參見以下示例(它不打算做任何有用的事情)

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”。後者僅在 Tk 8.6 的 Windows 上可用。

如果使用“image”,args 應該包含預設影像名稱,後跟狀態規範/值對(這是影像規範),kw 可能包含以下選項

border=padding

填充是最多四個整數的列表,分別指定左、上、右和下邊框。

height=height

指定元素的最小高度。如果小於零,則使用基礎影像的高度作為預設值。

padding=padding

指定元素的內部填充。如果未指定,則預設為邊框的值。

sticky=spec

指定影像在最終包裹中的放置方式。spec 包含零個或多個字元“n”、“s”、“w”或“e”。

width=width

指定元素的最小寬度。如果小於零,則使用基礎影像的寬度作為預設值。

示例

img1 = tkinter.PhotoImage(master=root, file='button.png')
img1 = tkinter.PhotoImage(master=root, file='button-pressed.png')
img1 = tkinter.PhotoImage(master=root, file='button-active.png')
style = ttk.Style(root)
style.element_create('Button.button', 'image',
                     img1, ('pressed', img2), ('active', img3),
                     border=(2, 4), sticky='we')

如果將“from”用作 etype 的值,element_create() 將克隆現有元素。args 預計包含一個主題名稱,從中克隆元素,以及一個可選的要克隆的元素。如果未指定要克隆的元素,則將使用空元素。kw 將被丟棄。

示例

style = ttk.Style(root)
style.element_create('plain.background', 'from', 'default')

如果“vsapi”用作 etype 的值,element_create() 將在當前主題中建立一個新元素,其視覺外觀使用 Microsoft Visual Styles API 繪製,該 API 負責 Windows XP 和 Vista 上的主題樣式。args 預計包含 Microsoft 文件中給出的 Visual Styles 類和部分,然後是一個可選的 ttk 狀態元組序列和相應的 Visual Styles API 狀態值。kw 可以有以下選項

padding=padding

指定元素的內部填充。padding 是一個最多包含四個整數的列表,分別指定左、上、右和下填充量。如果指定的元素少於四個,則底部預設為頂部,右側預設為左側,頂部預設為左側。換句話說,一個包含三個數字的列表指定左側、垂直和右側填充;一個包含兩個數字的列表指定水平和垂直填充;一個數字指定小部件周圍的相同填充。此選項不能與其他任何選項混合使用。

margins=padding

指定元素的外部填充。padding 是一個最多包含四個整數的列表,分別指定左、上、右和下填充量。此選項不能與其他任何選項混合使用。

width=width

指定元素的寬度。如果設定此選項,則不會查詢 Visual Styles API 以獲取推薦大小或部分。如果設定此選項,則 height 也應設定。widthheight 選項不能與 paddingmargins 選項混合使用。

height=height

指定元素的高度。請參閱 width 的註釋。

示例

style = ttk.Style(root)
style.element_create('pin', 'vsapi', 'EXPLORERBAR', 3, [
                     ('pressed', '!selected', 3),
                     ('active', '!selected', 2),
                     ('pressed', 'selected', 6),
                     ('active', 'selected', 5),
                     ('selected', 4),
                     ('', 1)])
style.layout('Explorer.Pin',
             [('Explorer.Pin.pin', {'sticky': 'news'})])
pin = ttk.Checkbutton(style='Explorer.Pin')
pin.pack(expand=True, fill='both')

版本 3.13 中有更改: 添加了對“vsapi”元素工廠的支援。

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,重新整理所有小部件併發出 <> 事件。

佈局

佈局可以是 None,如果它不帶選項,也可以是指定如何安排元素的選項字典。佈局機制使用簡化版的 pack 幾何管理器:給定一個初始空腔,每個元素都會分配一個包裹。

有效選項/值為

side: whichside

指定將元素放置在空腔的哪一側;可以是頂部、右側、底部或左側之一。如果省略,則元素佔據整個空腔。

sticky: nswe

指定元素在其分配的包裹內的位置。

unit: 0 或 1

如果設定為 1,則使元素及其所有後代在 Widget.identify() 等操作中被視為單個元素。它用於帶有握把的捲軸拇指等。

children: [子佈局…]

指定要放置在元素內的元素列表。每個元素都是一個元組(或其他序列型別),其中第一項是佈局名稱,另一項是 佈局