Python 自帶了 Tkinter 模塊,可以用來開發 Python 的 GUI 應用程序。
一、Tkinter 的基本結構
Tkinter 會創建一個主窗口(MainWindow),可以在窗口中添加控制項。控制項包括標籤(Label)、按鈕(Button)、文本框(Entry)、列表框(Listbox)、滾動條(Scrollbar)、菜單(Menu)、對話框(Dialog) 等;這些控制項都繼承自 tkinter.Widget。
下面是一個簡單的 Tkinter 程序。
import tkinter as tk # 創建主窗口 root = tk.Tk() # 創建標籤 label = tk.Label(root, text="Hello, Tkinter!") # 將標籤添加到主窗口 label.pack() # 進入消息循環 root.mainloop()
運行這段代碼,會創建一個窗口,窗口上有一行文本 “Hello, Tkinter!”
二、控制項的布局和事件處理
Tkinter 中控制項的布局通過幾何管理器來控制,常用的幾何管理器有 pack、grid 和 place。其中 pack 是最簡單的管理器,可以自動將控制項填充到父容器中。
對於事件處理,可以通過綁定事件處理函數來實現。下面是一個帶按鈕的程序,當按下按鈕時,會在標籤上顯示文本 “Hello, Tkinter!”
import tkinter as tk
def show_message():
label.config(text="Hello, Tkinter!")
# 創建主窗口
root = tk.Tk()
# 創建標籤
label = tk.Label(root, text="")
# 創建按鈕
button = tk.Button(root, text="Click me!", command=show_message)
# 將標籤和按鈕添加到主窗口
label.pack()
button.pack()
# 進入消息循環
root.mainloop()
三、用 Tinker 快速創建圖形化界面
Tkinter 是 Python 自帶的 GUI 庫,但它的 API 非常底層,需要處理很多細節。PyQt、wxPython 等庫封裝了更高層次的 API,能夠快速創建複雜的圖形化界面。而 Python Tinker 則是在 Tkinter 的基礎上封裝了更高級的 API,可以更快速地開發 GUI 應用程序。
下面是一個使用 Tinker 創建的簡單程序,包括一個菜單和一個標籤,當用戶選擇菜單項時,標籤會顯示對應的文本。
import tkinter as tk
from tkinter import ttk # 導入 ttk,因為 tk 中沒有 Combobox 控制項
def change_message(event):
index = combo.current()
message = messages[index]
label.config(text=message)
# 創建主窗口
root = tk.Tk()
# 創建菜單
menu = tk.Menu(root)
root.config(menu=menu)
file_menu = tk.Menu(menu)
menu.add_cascade(label="File", menu=file_menu)
file_menu.add_command(label="New")
file_menu.add_command(label="Save")
file_menu.add_command(label="Exit", command=root.quit)
# 創建下拉框和標籤
messages = ["Hello, Tinker!", "Goodbye, Tinker!"]
combo = ttk.Combobox(root, values=messages)
combo.current(0)
label = tk.Label(root, text="")
# 將下拉框和標籤添加到主窗口
combo.pack()
label.pack()
# 綁定事件處理函數
combo.bind("<>", change_message)
# 進入消息循環
root.mainloop()
在這個程序中,我們通過 ttk 模塊創建了 Combobox 下拉框控制項,同時添加了菜單。
四、小結
Python Tinker 這個 GUI 庫可以幫助我們更快速地開發 Python 的圖形化界面程序。通過上面的示例,我們可以看到,使用 Tinker 相對於純 Tkinter 來說,代碼更為簡潔,同時也提供了更高層次的 API。當然,如果需要開發更為複雜的 GUI 應用程序,還是建議使用其他高級 GUI 庫。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/156505.html
微信掃一掃
支付寶掃一掃