/

用 `tkinter` 開始 GUI 程式設計

tkinter 開始 GUI 程式設計

GUI 程式設計既令人興奮又有趣!

Python 的標準庫中附帶的 tkinter 模組是一個 GUI 工具包,可用於在我們的程式中創建跨不同操作系統的圖形使用者界面。

雖然有第三方庫可以讓你創建 GUI 介面,但 tkinter 是與 Python 整合在一起的工具包,因此這是我們要解釋的內容。

讓我們從一個簡單的應用程式開始,它會顯示一個標籤:

1
2
3
4
5
6
import tkinter as tk

root = tk.Tk()
label = tk.Label(root, text="Hello, World!", padx=10, pady=10)
label.pack()
root.mainloop()

從終端機運行此程式。

你很快就會看到一個視窗出現。在 macOS 上的外觀如下所示:

明確關閉視窗,您將看到終端機程式結束。視窗的外觀將根據您的操作系統而有所不同。

你可以調整視窗的大小、隱藏它,甚至使它全屏顯示。

在視窗打開的同時,從終端機啟動的 Python 程序仍然活動中。按下紅色的(x)按鈕關閉視窗,您將看到終端機程序退出。

與大多數 CLI(命令行界面)應用程序不同,GUI 應用程序始終等待用戶事件,例如鼠標或鍵盤事件,並只在明確關閉時退出。

現在你已經看到了魔法的發生,我們來談談程式。這僅僅是 5 行程式碼,卻為我們打開了 GUI 的世界。

1
2
3
4
5
6
import tkinter as tk

root = tk.Tk()
label = tk.Label(root, text="Hello, World!", padx=10, pady=10)
label.pack()
root.mainloop()

我們導入 tkinter 模組,並將其縮寫為 tk 以便使用。

然後,我們使用 tk.Tk() 初始化了一個頂級窗口。

我們使用 tk.Label() 小部件構造函式初始化標籤,將 root 頂級小部件作為第一個參數,並添加了一些其他信息,例如要顯示的文本和一些填充。

接下來,我們將標籤裝入其父小部件,然後調用 root.mainloop() 開始 tkinter 事件循環,該事件循環將管理應用程序的生命周期。

如果您喜歡,也可以從 tkinter 個別導入每個項目,這樣您就無需每次使用前綴:

1
2
3
4
5
6
from tkinter import Tk, Label

root = Tk()
label = Label(root, text="Hello, World!", padx=10, pady=10)
label.pack()
root.mainloop()

我提到了小部件(widgets)。Label 是一個小部件,但我們還有很多其他的小部件。我們將經常使用的其他小部件包括 TextEntryButtonStringVarCanvasFramePhotoImageScrollbarMenu等等!

讓我們構建一個簡單的程式。應用程式啟動後會生成一個隨機數。我們將放置一個輸入框,用戶可以輸入一個數字,按一個按鈕,然後檢查它是否是中獎號碼!

我們將使用 LabelEntryButton 小部件來創建此使用者界面:

當按下 Guess! 按鈕時,我們調用一個 guess() 函式,該函式獲取輸入框的值,並檢查它是否等於我們使用 random.randint() 生成的隨機數。

如果數字正確,我們會顯示一條包含 messagebox 的訊息,然後退出應用程序:

以下是完整的程式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from tkinter import Tk, Label, Entry, Button, messagebox

import random
n = random.randint(1,10)
print(n)

root = Tk()
label = Label(root, text="猜一個介於 1 到 10 之間的數字!", padx=10, pady=10)
label.pack()

ent = Entry(root)
ent.pack()

def guess():
try:
num = int(ent.get())
except ValueError:
print('無效的值。請輸入一個數字。')
else:
if num == n:
print('贏了!')
messagebox.showinfo(title='你贏了!', message='你猜中了數字!')
root.destroy()

else:
print('錯誤的數字:' + str(num))
messagebox.showerror(title='錯誤!', message='再試一次!')

widget = Button(root, text='猜!', command=guess)
widget.pack()
root.mainloop()

這些只是 tkinter 的基礎知識。關於它還有很多要了解的,但我希望這可以讓你開始學習 GUI 程式設計。

tags: [“python”, “tkinter”, “GUI programming”]