Tkinter 教程 - 按鈕

Jinku Hu 2023年1月3日
Tkinter 教程 - 按鈕

Tkinter 按鈕控制元件 Button

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

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

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 選項會呼叫回撥函式。

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)
)
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook