Tk 的基本概念-組件—Tkinter 教程系列03
- 2021 年 4 月 17 日
- 筆記
- tkinter, Tkinter 教程
Tk 的基本概念-組件—Tkinter 教程系列03
前言
Tk 系列教程:
通過上一節的程式實例,我們掌握了編寫一個 Tk 程式的基本步驟和完成它需要的一些工作。這一節,我們回過頭來看看這些程式,並且專註於講解對於理解 Tk 至關重要的三個概念:1、組件(Widgets)2、集合管理(Geometry Management)3、事件處理(Event Handling)。
組件(Widgets)
組件是所有你在螢幕上看到的東西。在我們的例子中,我們創建了一個按鈕(button),輸入框(entry),顯示區域(labels)和一個框架(frame)。一些其他的組件包括:複選框(checkboxes),樹狀視圖(tree views),滾動條(scrollbars),文字區域(text areas)等等。
組件經常被認為是控制組件(控制項),但是他們是組成視窗的基本單位。
組件類(Widget Classes)
組件是對象,是代表按鈕,框架等類的實例。所以你要做的第一件事情是區分你要創建並實例化的類。
窗口層次結構(Window Hierarchy)
在創建一個組件的對象時,需要提供它的父類。所以我們需要理解它們的層次結構。在 Tk 中,所有的組件都是一個窗口層次結構中的一部分。在這個結構中,主窗口(root)在最頂層,並能往下延申。
在我們第二節的例子中,我們創建了一個主窗口(root),並在其下面延申了許多結構,這類似於數據結構中的數(tree),每個子結構都是這個大結構的子樹。
創建並使用組件(Creating and Using Widgets)
每一個組件都是 Python 中的一個對象。當創建一個組件時,我們必須向創建函數以參數的形式傳遞它的父類。唯一的例外是主窗口(root),它是窗口結構層次的頂層,沒有父類。例如:
root = Tk()
content = ttk.Frame(root)
button = ttk.Button(content)
至於是否將組件對象保存到變數中,這取決於你的想法,當然也取決於你之後是否會引用他們。因為對象存在於這個窗口層次結構之中,所以即使你不去引用它們,它們也不會被垃圾回收器回收掉。
設置選項(Configuration Options)
所有的組件都有許多不同的設置選項,它們控制隨著組件的顯示和行為。
可用的設置選項取決於你所使用的組件類。大部分組件都有極大的相似性,所以在不同的組件中,執行相同事件的選項基本上被命名為相同的名字。例如,按鈕(button)和顯示框(label)都有 text
選項,用來控制字元在組件中的顯示。而滾動條(scrollbar)就沒有這個選項,因為它也不需要。同樣的道理,按鈕類中有 command
選項,用來告訴它如果被點擊,需要執行的動作,而其他類則沒有。
設置選項可以通過傳遞參數在第一次創建時被設置,你可以在之後查看或者修改它們。如果你不確定一個組件的所有選項,你可以直接向組件詢問它們。下面是一組 Python 解釋器的交互記錄,可以很好的說明這一點。
% python
>>> from tkinter import *
>>> from tkinter import ttk
>>> root = Tk()
# 創建按鈕,通過傳遞兩個參數:
>>> button = ttk.Button(root, text="Hello", command="buttonpressed")
>>> button.grid()
# 查看按鈕的 text 選項的值:
>>> button['text']
'Hello'
# 改變 text 選項的值:
>>> button['text'] = 'goodbye'
# 另一個方法:
>>> button.configure(text='goodbye')
# 檢查現在 text 選項的值:
>>> button['text']
'goodbye'
# 得到 button 組件 text 選項的所有資訊:
>>> button.configure('text')
('text', 'text', 'Text', '', 'goodbye')
# 得到所有button組件的所有選項的資訊和可能的取值:
>>> button.configure()
{'cursor': ('cursor', 'cursor', 'Cursor', '', ''), 'style': ('style', 'style',
'Style', '', ''),
'default': ('default', 'default', 'Default', <index object at 0x00DFFD10>,
<index object at 0x00DFFD10>),
'text': ('text', 'text', 'Text', '', 'goodbye'), 'image': ('image', 'image',
'Image', '', ''),
'class': ('class', '', '', '', ''), 'padding': ('padding', 'padding', 'Pad', '',
''),
'width': ('width', 'width', 'Width', '', ''),
'state': ('state', 'state', 'State', <index object at 0x0167FA20>, <index object
at 0x0167FA20>),
'command': ('command', 'command' , 'Command', '', 'buttonpressed'),
'textvariable': ('textvariable', 'textVariable', 'Variable', '', ''),
'compound': ('compound', 'compound', 'Compound', <index object at 0x0167FA08>,
<index object at 0x0167FA08>),
'underline': ('underline', 'underline', 'Underline', -1, -1),
'takefocus': ('takefocus', 'takeFocus', 'TakeFocus', '', 'ttk::takefocus')}
後記
下一部分我們將會介紹關於 Tk 中 幾何管理(Geometry Management)這一概念。
歡迎光臨我的個人部落格:chens.life