GUI 程式設計既令人興奮又有趣!
Python 的標準庫中附帶的 tkinter
模組是一個 GUI 工具包,可用於在我們的程式中創建跨不同操作系統的圖形使用者界面。
雖然有第三方庫可以讓你創建 GUI 介面,但 tkinter
是與 Python 整合在一起的工具包,因此這是我們要解釋的內容。
讓我們從一個簡單的應用程式開始,它會顯示一個標籤:
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 的世界。
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
個別導入每個項目,這樣您就無需每次使用前綴:
from tkinter import Tk, Label
root = Tk()
label = Label(root, text="Hello, World!", padx=10, pady=10)
label.pack()
root.mainloop()
我提到了小部件(widgets)。Label 是一個小部件,但我們還有很多其他的小部件。我們將經常使用的其他小部件包括 Text
、Entry
、Button
、StringVar
、Canvas
、Frame
、PhotoImage
、Scrollbar
、Menu
等等!
讓我們構建一個簡單的程式。應用程式啟動後會生成一個隨機數。我們將放置一個輸入框,用戶可以輸入一個數字,按一個按鈕,然後檢查它是否是中獎號碼!
我們將使用 Label
、Entry
和 Button
小部件來創建此使用者界面:
當按下 Guess!
按鈕時,我們調用一個 guess()
函式,該函式獲取輸入框的值,並檢查它是否等於我們使用 random.randint()
生成的隨機數。
如果數字正確,我們會顯示一條包含 messagebox
的訊息,然後退出應用程序:
以下是完整的程式:
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 程式設計。