如果你想學習Python GUI編程,那麼Tkinter是一個非常好的選擇。Tkinter作為Python內置的GUI工具包,其簡易性、可移植性和可擴展性都是極為出色的。
在這篇文章中,我們將介紹Python tkinterpack的基礎知識。首先,我們將講解如何安裝Tkinter並編寫你的第一個GUI應用程序。接着,我們將深入理解Tkinter的基礎知識,例如Frame、Label、Button等。最後,我們將討論如何構建更為複雜的GUI應用程序。
一、安裝和第一個應用程序
安裝
首先,讓我們來安裝Tkinter。在Python2.x中,Tkinter已經被默認安裝。對於Python3.x,如果你沒有安裝Tkinter,你需要執行以下步驟:
sudo apt-get install python3-tk
或者
sudo yum install python3-tkinter
第一個應用程序
讓我們快速地寫一個程序,用它來了解Tkinter是如何工作的。這個程序將在屏幕中央顯示一個按鈕,點擊它將會彈出一個問候對話框。
import tkinter as tk
from tkinter import messagebox
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.hello_button = tk.Button(self)
self.hello_button["text"] = "Click me!"
self.hello_button["command"] = self.say_hello
self.hello_button.pack(side="top")
def say_hello(self):
messagebox.showinfo("Hello!", "Hello World")
root = tk.Tk()
app = Application(master=root)
app.mainloop()
在上述代碼中,我們首先導入Tkinter和messagebox模塊。我們創建了一個Application類,它是一個Frame,用來容納作為自己的子組件的所有小部件。在構造函數中,我們調用了Frame的構造函數,並將self.master設置為主Tkinter對象。然後我們調用了create_widgets()方法,該方法將創建我們唯一的小部件——一個Button。這個Button有一個命令(command)屬性,將其設置為say_hello方法,這個方法將彈出一個messagebox,顯示問候語。
最後一行創建了主Tkinter對象,並啟動事件循環。
二、基本的Tkinter小部件
下面我們將介紹基本的Tkinter小部件,它們可用於創建GUI應用程序。這些小部件包括Frame、Label、Button、Entry、Checkbutton、Radiobutton、Listbox、Scrollbar、Menu和Canvas。
Frame
Frame通常被用作容器,來容納其他的小部件。它本身不顯示任何東西,但是可以調整其他小部件的位置和大小。
import tkinter as tk
root = tk.Tk()
frame1 = tk.Frame(root)
frame1.pack()
frame2 = tk.Frame(root)
frame2.pack(side="bottom")
tk.Button(frame1, text="Button1", fg="red").pack(side="left")
tk.Button(frame1, text="Button2", fg="blue").pack(side="left")
tk.Button(frame2, text="Button3", fg="green").pack(side="bottom")
root.mainloop()
上述代碼中,我們創建了兩個Frame,frame1位於頂部,frame2位於底部。我們在frame1中放置了兩個Button,它們分別位於frame1左側,button3位於frame2中,位於底部。
Label
Label用於在GUI中顯示文本或圖像。
import tkinter as tk
root = tk.Tk()
label = tk.Label(root, text="Hello World")
label.pack()
root.mainloop()
上述代碼中,我們創建了一個Label,該Label包含一個文本”Hello World”。將Label添加到主Tkinter對象並運行程序。
Button
Button允許用戶單擊它來觸發某些操作。
import tkinter as tk
root = tk.Tk()
def say_hello():
print("Hello World")
button = tk.Button(root, text="Click me!", command=say_hello)
button.pack()
root.mainloop()
上述代碼中,我們定義了一個say_hello函數,當用戶單擊Button時,該函數將被調用。我們創建一個Button,並將其命令設置為say_hello函數。將Button添加到主Tkinter對象並運行程序。
Entry
Entry用於輸入文本信息。
import tkinter as tk
root = tk.Tk()
entry = tk.Entry(root)
entry.pack()
root.mainloop()
上述代碼中,我們創建了一個Entry,用於用戶輸入文本。將Entry添加到主Tkinter對象並運行程序。
Checkbutton
Checkbutton用於啟用/禁用選項。
import tkinter as tk
root = tk.Tk()
var1 = tk.BooleanVar()
var2 = tk.BooleanVar()
checkbutton1 = tk.Checkbutton(root, text="Option1", variable=var1)
checkbutton2 = tk.Checkbutton(root, text="Option2", variable=var2)
checkbutton1.pack()
checkbutton2.pack()
root.mainloop()
上述代碼中,我們創建了兩個Checkbutton,用於啟用/禁用選項。我們定義了兩個BooleanVar變量來存儲選項是否被選中。將Checkbutton添加到主Tkinter對象並運行程序。
Radiobutton
Radiobutton用於從多個選項中選擇一個。
import tkinter as tk
root = tk.Tk()
var = tk.StringVar()
var.set("Option1")
radiobutton1 = tk.Radiobutton(root, text="Option1", variable=var, value="Option1")
radiobutton2 = tk.Radiobutton(root, text="Option2", variable=var, value="Option2")
radiobutton3 = tk.Radiobutton(root, text="Option3", variable=var, value="Option3")
radiobutton1.pack()
radiobutton2.pack()
radiobutton3.pack()
root.mainloop()
在上述代碼中,我們創建了三個Radiobutton,用於從多個選項中選擇一個。我們定義了一個StringVar變量來存儲選項。將Radiobutton添加到主Tkinter對象並運行程序。
Listbox
Listbox用於顯示多個可選項。
import tkinter as tk
root = tk.Tk()
listbox = tk.Listbox(root)
listbox.insert(1, "Option1")
listbox.insert(2, "Option2")
listbox.insert(3, "Option3")
listbox.pack()
root.mainloop()
上述代碼中,我們創建了一個Listbox,用於顯示多個可選項。我們使用insert()方法向Listbox中添加項目。將Listbox添加到主Tkinter對象並運行程序。
Scrollbar
Scrollbar用於支持滾動功能的小部件。
import tkinter as tk
root = tk.Tk()
listbox = tk.Listbox(root)
listbox.insert(1, "Option1")
listbox.insert(2, "Option2")
listbox.insert(3, "Option3")
scrollbar = tk.Scrollbar(root)
scrollbar.pack(side="right", fill="y")
listbox.pack(side="left", fill="both")
scrollbar.config(command=listbox.yview)
listbox.config(yscrollcommand=scrollbar.set)
root.mainloop()
在上述代碼中,我們創建了一個Listbox和一個Scrollbar。將Scrollbar添加到主Tkinter對象,並為其設置command,以便滾動Listbox中的項。將Listbox添加到主Tkinter對象並使用yscrollcommand屬性並設置其為Scrollbar的set方法。運行程序。
Menu
Menu用於創建菜單。
import tkinter as tk
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="Open...", command=lambda: print("Open File"))
file_menu.add_command(label="Exit", command=root.quit)
root.mainloop()
上述代碼中,我們創建了一個菜單及其子菜單。將菜單添加到主Tkinter對象,並運行程序。點擊菜單中的項應該會執行相應的命令。
Canvas
Canvas用於繪製圖形。
import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root, width=200, height=200)
canvas.pack()
canvas.create_rectangle(50, 50, 150, 150, fill="blue")
canvas.create_line(0, 0, 200, 200)
root.mainloop()
在上述代碼中,我們創建了一個Canvas,並在其上創建了一個矩形和一條線段。將Canvas添加到主Tkinter對象並運行程序。
三、構建複雜的GUI應用程序
在本節中,我們將介紹如何構建複雜的GUI應用程序。我們將使用上文介紹的所有小部件,並學習如何將它們組合成一個完整的應用程序。
樣例
我們將構建一個簡單的應用程序,其中包含一個文本框、一個按鈕和一個標籤。當用戶單擊按鈕時,我們將獲取文本框中的文本,並將其顯示在標籤中。
import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
self.input_frame = tk.Frame(self)
self.input_frame.pack(side="top")
self.input_label = tk.Label(self.input_frame, text="Input:")
self.input_label.pack(side="left")
self.input_entry = tk.Entry(self.input_frame)
self.input_entry.pack(side="left")
self.button_frame = tk.Frame(self)
self.button_frame.pack(side="top")
self.submit_button = tk.Button(self.button_frame, text="Submit", command=self.submit)
self.submit_button.pack(side="left")
self.quit_button = tk.Button(self.button_frame, text="Quit", command=self.master.quit)
self.quit_button.pack(side="left")
self.output_frame = tk.Frame(self)
self.output_frame.pack(side="top")
self.output_label = tk.Label(self.output_frame, text="Output:")
self.output_label.pack(side="left")
self.output_text = tk.StringVar()
self.output_entry = tk.Entry(self.output_frame, textvariable=self.output_text)
self.output_entry.pack(side="left")
def submit(self):
text = self.input_entry.get()
self.output_text.set(text)
root = tk.Tk()
app = Application(master=root)
app.mainloop()
在上述代碼中,我們創建了一個Application類,用作Frame的子組件容器。我們將其分為三個Frame,分別是:輸入、按鈕以及輸出。我們在輸入Frame中添加了一個Label和一個Entry,用於用戶輸入文本。我們在按鈕Frame中添加了兩個Button,一個提交用戶輸入,另一個退出程序。在輸出Frame中添加了一個Label和一個Entry,用於顯示提交的文本。
在submit()方法中,我們獲取了用戶輸入的文本,並將其設置到輸出Entry中。
運行程序,你將看到一個包含輸入框、按鈕和輸出框的窗口。在輸入框中輸入文本並單擊按鈕,你將在輸出框中看到相同的文本。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/199384.html