Tkinter 按鈕

Tkinter 按鈕控制元件 Button

Tkinter 按鈕控制元件 ButtonTkinter 標籤非常相似。 它和 Tkinter 標籤具有幾乎相同的選項,除了它有一個額外的預設 default 選項。 我們將在演示完基本按鈕例子之後,再回到這個預設選項 default 的詳細資訊。

下面的程式碼生成了兩個非常簡單的按鈕。

Tkinter Button_Basic.py
from sys import version_info
if version_info.major == 2:
    import Tkinter as tk
elif version_info.major == 3:
    import tkinter as tk
    
app = tk.Tk()
button1 = tk.Button(app, text="Python Label 1")
button2 = tk.Button(app, text="Python Label 2")
button1.pack(side=tk.LEFT)
button2.pack(side=tk.LEFT)
app.mainloop()

在你執行程式碼後,會在視窗中顯示出兩個彼此相鄰的按鈕。

Tkinter 教程-基本按鈕按鈕

Tkinter 按鈕預設選項 default

按鈕中的預設選項 default 通知 GUI,該按鈕 GUI 中的預設按鈕。或者用一句簡單的話來說,當使用者按確認或回車鍵時,會自動調該按鈕。

Tkinter 按鈕回撥命令

當使用者按下按鈕時,command 選項會呼叫回撥函式。

Tkinter Button_command callback.py
from sys import version_info
if version_info.major == 2:
    import Tkinter as tk
elif version_info.major == 3:
    import tkinter as tk
    

    
app = tk.Tk()
labelExample = tk.Button(app, text="0")

def change_label_number():
    counter = int(str(labelExample['text']))
    counter += 1
    labelExample.config(text=str(counter))
    
buttonExample = tk.Button(app, text="Increase", width=30,
                          command=change_label_number)

buttonExample.pack()
labelExample.pack()
app.mainloop()

它在主視窗中建立了一個按鈕和一個標籤控制元件。當你每次單擊按鈕時,標籤文字中的數字都會加 1。

Tkinter 教程_按鈕命令回撥

def change_label_number():
    counter = int(str(labelExample['text']))
    counter += 1
    labelExample.config(text=str(counter))

change_label_number 是單擊按鈕時被呼叫的回撥函式。該函式讀取標籤所顯示的數字,數字加 1 後再將新數字設定為標籤文字。

buttonExample = tk.Button(app, text="Increase", width=30,
                          command=change_label_number)

這句話繫結按鈕和回撥函式 change_label_number

帶引數的命令回撥函式

如果回撥函式需要輸入引數,我們則需要 functools 中的 partial 物件。partial 物件是帶有位置引數 args 和關鍵字引數 keywords 的可呼叫物件。

下面的程式碼片段演示瞭如何在按鈕命令中使用這個 partial 功能。

def change_label_number(num):
    counter = int(str(labelExample['text']))
    counter += num
    labelExample.config(text=str(counter))
    
buttonExample = tk.Button(app, text="Increase", width=30,
                          command=partial(change_label_number, 2))