Tkinter (22) 標準化外觀及選項資料庫

Jason990420發表於2020-08-23

使用選項資料庫來設定部件預設選項值, 另外可以使用預先設定檔案.XDefaults檔案; 每一個部件有一個類別名稱, 基本上等同類別構造器, 比如按鈕為Button, 也可以自行命名; 另外一種名稱就如同例項名, 預設的名稱為沒有意義的數值名. 所以每一個部件就會有一個類似繼承的名稱, 如Frame.Text.Button (在Frame 的Text 中的Button) 或 .mainFrame.messageText.panicButton (第一個點代表根視窗).

建立一個新的類及命名為 Jukebox

class Jukebox(tk.Frame):
    def __init__(self, master):
        '''Constructor for the Jukebox class'''
        tk.Frame.__init__(self, master, class_='Jukebox')
        self.__createWidgets()
        ...

建立一個按鈕例項及命名 panicButton

    self.panic = tk.Button(self, name='panicButton', text='Panic', ...)

預先設定檔案

檔案中每一行指定一個或多個選項值, 其格式如下:

app option-pattern: value
option-pattern: value

第一行 設定應用名為 app 的選項
第二行 設定所有應用的選項

xparrot*background: LimeGreen

設定應用名 xparrot 中所有的 background 選項為 LimeGreen. (在命令列中使用 -name 來設定應用名)

option-pattern 的語法: {{*|.}name}...option

{ } 代表可有可無, ... 代表可重複, option 代表選項名稱, name 可以是大寫的部件分類名或小寫的例項名.

*font: times 24

所有字型的選項內定為 times 24, * 代表鬆散繫結符號, 指該設定可以適用到任何應用, 任意地方的任何字型選項.

*Listbox.font: lucidatypewriter 14

. 代表緊密繫結符號, 指該設定僅適用到在 Listbox 類中的所有部件的字型選項.

xparrot*Jukebox*background: PapayaWhip

在應用 xparrot 的 Jukebox 中的所有部件的所有預設 background 值為 PapayaWhip

xparrot*Jukebox.background: NavajoWhite

在應用 xparrot 的 Jukebox 的預設 background 值為 NavajoWhite

資源匹配規則

當部件建立時, 未指定某些選項值時, 如果有多項資源規範適用於該選項, 將採用最具體的一個. 下例中, 第二項比第一項, 更清楚指明 Listbox 的 background, 以 Listbox 而言, background 將採第二項

*background: LimeGreen
*Listbox*background: FloralWhite

資源匹配的順序

  1. . 優先於 *
  2. 例項優於類別 (如 panicButton 優於 Button)
  3. 多層深入優於淺層 (如 *Button*font 優於 *font)
  4. 如果兩個規則的級別數相同, 列表中較早的名稱, 優於較晚的名稱 (xparrot*font 優於 *Button*font)
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Jason Yang

相關文章