Python Tkinter 項目 [分步說明]
已發表: 2020-09-14在 Python 中學習 GUI 可能非常具有挑戰性。 不用擔心,因為我們有您的支持! 在本文中,我們分享了一個 Tkinter 教程,以便您可以高效地處理 Python GUI 項目。 完成本教程後,您將熟悉用於創建 Python Tkinter 項目的構建塊。 如果您想獲得更多關於 python 的專業知識,請查看我們的數據科學課程。
我們還分享了每一步的代碼。 但是,我們建議您僅在了解其工作原理後才複製和粘貼它。 否則,它沒有多大用處。
目錄
什麼是 Tkinter?
Tkinter 是 Python 使用 Tk GUI 工具包的一個包。 您可以使用 Tkinter 通過 Python 創建 GUI 程序。 雖然 Tkinter 能夠生成許多程序,但您可能需要使用模塊進行高級實現。 在從事 Python Tkinter 項目之前,您應該熟悉 Tkinter 的基礎知識:
Tkinter 中的 Hello World 程序
這是 Tkinter 中的 hello world 程序的示例:
將 tkinter 導入為 tk
類應用程序(tk.Frame):
def __init__(self, master=None):
超級().__init__(主)
self.master = 主人
自我包裝()
self.create_widgets()
def create_widgets(self):
self.hi_there = tk.Button(self)
self.hi_there[“text”] = “Hello World\n(點擊我)”
self.hi_there[“command”] = self.say_hi
self.hi_there.pack(side=”top”)
self.quit = tk.Button(self, text=”QUIT”, fg=”red”,
命令=self.master.destroy)
self.quit.pack(side=”bottom”)
def say_hi(self):
print(“大家好!”)
根 = tk.Tk()
應用程序=應用程序(主=根)
app.mainloop()
Tkinter 中的幾何管理器
在處理 Python Tkinter 項目時您應該了解的另一個主要概念是幾何管理器。 如果不使用幾何管理器,您的小部件將不會出現在屏幕上。 主要有三種方法可以添加幾何管理器:
網格
它向父級添加了一個網格,並允許它相應地顯示小部件。 網格具有用於測量其小部件的長度和高度的行和列。
盒
此方法告訴小部件將自己打包在父級中。 它僅將小部件添加到父小部件的子小部件列表中。 簡單來說,它會先將它們添加到塊中,然後再將它們放置在父窗口小部件中。
地方
此方法根據父小部件將小部件放置在特定位置。
在下面的教程中,我們使用包管理器來處理小部件的位置。 這就是為什麼最好熟悉這些概念。 這將幫助您更好地了解我們項目的工作。
結帳: 42個令人興奮的Python項目想法和初學者主題
在 Python 中構建 GUI(Tkinter 教程)
步驟#1:導入模塊
要開始處理應用程序,我們首先必須導入必要的模塊。 您可以通過在命名空間中導入模塊來做到這一點。 它將允許您按名稱使用常量和類,而不是限定它們。 這意味著您可以通過使用其名稱來使用“標籤”,而不是將其限定為“TkinterLabel”。 這將使事情變得相對容易,並且您可以節省大量時間,因為每個班級和常數的排位賽可能非常麻煩。 使用以下代碼導入模塊:
>>> 從 Tkinter 導入 *
如果 Python 沒有鏈接到您系統中的 Tk(或 Tcl),或者您的系統中沒有安裝 Tk(或 Tcl),您將在本節中看到一條錯誤消息。 要解決此問題,您需要係統管理員才能訪問。 確保通過執行相同的操作來解決此問題。
另一方面,如果您在這些部分中沒有看到任何錯誤消息,則可以繼續下一步以創建一個窗口:
>>> 贏 = Tk()
我們已經為我們的窗口分配了變量“win”。 執行上述代碼後,您會在屏幕上看到一個小窗口。 它的標題欄應該顯示寫有“tk”。
這意味著您已成功完成此步驟,現在可以開始在 Python 中構建 GUI。
步驟#2:添加按鈕
現在我們已經運行了 Tkinter,我們可以向我們的程序添加按鈕。 按鈕是任何 GUI 程序中最簡單的部分,因此我們將從它們開始:
>>> b1 = Button(win, text=”One”)
>>> b2 = Button(win, text=”Two”)
我們在上一節中創建的窗口是我們現在製作的按鈕的父窗口。 隨著您將從事更多 Python Tkinter 項目,您會發現框架也可以充當其他類的父級。 現在,當你實現這段代碼時,你會注意到一個奇怪的現象——按鈕沒有出現在窗口中!
那是因為我們需要在我們的程序中添加一個網格和一個包。 它們被稱為幾何管理器,我們在本文前面已經討論過它們。 我們將在下一部分添加包管理器:
步驟#3:實現包管理器
我們將使用 pack 方法將按鈕添加到父窗口小部件。 使用包管理器,您可以告訴您希望將子小部件打包到父小部件的哪一側。 您可以使用 TOP、RIGHT、BOTTOM、LEFT 作為您的功能。 如果您不指定邊,程序默認選擇 TOP。 讓我們首先添加包管理器:
>>> b1.pack()
>>> b2.pack()
當您添加第一個按鈕(代碼的第一行)時,您會注意到您的窗口縮小到按鈕的大小。 同樣,當您添加第二個按鈕(代碼的第二行)時,窗口會根據該按鈕的大小展開。 窗口已將按鈕按垂直順序放置,因為我們沒有指定它們應該放在哪一側。 讓我們使用下面的代碼將它們打包在左側:
>>> b2.pack(邊=左)
>>> b1.pack(邊=左)
請注意,當我們必須將小部件僅按這兩種順序(水平和垂直)放置時,我們主要使用包管理器。 對於其他類型的小部件放置,我們使用 grid 方法或 place 方法。 您可以使用“padx”或“pady”功能在按鈕和窗口之間添加一些空間。 'padx' 函數向小部件的 X 軸(左和右)添加填充,'pady' 函數向設備的 Y 軸(頂部和底部)添加填充。
>>> b1.pack(邊=左,padx=10)
>>> b2.pack(邊=左,padx=10)
我們建議嘗試使用小部件的填充。 它將幫助您了解可以修改小部件位置的不同方式。 填充是一個具有挑戰性的概念,因此最好在進入下一部分之前嘗試一下。
步驟#4:網格管理器
Tkinter 中另一個流行的幾何管理器是網格管理器。 正如我們在文章前面所討論的,網格管理器允許您將父級劃分為行和列。 您可以將子小部件放置在父網格的單元格中。 您可以根據需要修改每列和每行的寬度和長度。 並非每一列都必須具有相同的寬度。 同樣,每一行不需要具有相同的高度。 因此,網格管理器在編輯小部件的外觀和位置方面為您提供了更多的創意自由。
我們將使用之前創建的相同按鈕創建一個新窗口,以測試網格管理器。 但是,我們將在 2×2 網格中添加按鈕:
>>> 贏 = Tk()
>>> b1 = Button(win, text=”One”)
>>> b2 = Button(win,text=”Two”)
>>> b1.grid(行=0,列=0)
>>> b2.grid(行=1,列=1)
您會注意到我們的程序已將一些單元格留空。 那是因為我們沒有向第 0 行第 1 列(或第 1 行和第 0 列)添加任何內容。 我們將嘗試一個新的小部件來查看一些有趣的東西:
>>> l = Label(win, text=”這是一個標籤”)
>>> l.grid(行=1,列=0)
添加上述代碼後,您會注意到第二個按鈕向右移動以容納文本。 最好嘗試帶有多個小部件的網格管理器,看看它是如何工作的。
必讀:印度的 Django 開發人員薪水
步驟#5:改進佈局
在本節中,我們將嘗試一個名為 frame 的新小部件。 框架僅用於包含其他小部件。 您可以將多個小部件打包到一個框架中,或使用網格將它們放在同一個框架中。 您還可以將不同的框架打包到一個框架中。 此功能允許您為您的 GUI 程序創建高級佈局。 例如,我們將三個按鈕連續添加到一個框架中。 水平添加按鈕,然後將標籤與框架垂直打包:
>>> 贏 = Tk()
>>> f = 幀(獲勝)
>>> b1 = 按鈕(f,“一個”)
>>> b2 = 按鈕(f,“二”)
>>> b3 = 按鈕(f,“三”)

>>> b1.pack(邊=左)
>>> b2.pack(邊=左)
>>> b3.pack(邊=左)
>>> l = Label(win,”這個標籤在所有按鈕上”)
>>> l.pack()
>>> f.pack()
正如我們在本文前面所討論的,您還可以使用 place 方法作為幾何管理器。 place 方法允許您將小部件放置在窗口或框架內的特定位置。 但是,我們不建議頻繁使用 place 方法,因為它會限製程序的響應能力。
使用網格功能,您可以使用“粘性”參數,該參數允許您使用地圖坐標(S、N、W、SW、NE 等)來指定小部件的位置。 在我們進入下一部分之前,請確保您了解我們已經討論過的功能。 測試網格和框架的功能,看看如何在其他 Python GUI 項目中使用它。
步驟#6:使按鈕有用
如果您單擊我們迄今為止創建的按鈕,您一定注意到它們沒有響應(它們不做任何事情)。 當您單擊它們時它們會按下並在您將鼠標懸停在它們上方時突出顯示,但它們不執行任何功能。 為了使我們的按鈕執行特定的功能,我們必須使用“配置”功能。
我們可以將任何關鍵字參數傳遞給小部件的“配置”方法,以便在創建時傳遞它。 這是一個例子:
>>> b1.configure(text="Uno")
當您創建按鈕或向按鈕添加“配置”時,“命令”參數將按鈕與回調函數聯繫起來。 為了理解它是如何工作的,我們將創建一個打印出消息的函數:
>>> def 但1():
… print(“按鈕一被按下”)
…
>>> b1.configure(command=but1)
因此,當您單擊相應的按鈕時,它會打印一條消息。
步驟#7:添加條目小部件
輸入小部件允許用戶在程序中輸入文本。 但是,我們必須像使用按鈕一樣使條目小部件起作用。 條目小部件必須檢索(和設置)文本。 對於要執行此功能的條目小部件,您必須使用 Tkinter 對象“StringVar”。 'StringVar' 對像以字符串的形式保存文本,並通過 get 使其可讀。
我們將創建一個新窗口來測試我們的條目小部件:
>>> 贏 = Tk()
>>> v = StringVar()
>>> e = Entry(win,textvariable=v)
>>> e.pack()
現在讓我們添加“這是一個測試”作為條目並通過 StringVar 檢索相同的條目:
>>> v.get()
“這是一個測驗”
您現在可以將文本設置為 StringVar 並使其顯示在小部件中:
>>> v.set(“這是從程序中設置的”)
附加小部件:列錶框小部件
除了入口小部件,我們還可以添加一個列錶框小部件。 列錶框小部件允許用戶從菜單中選擇一個項目。 我們將創建一個新窗口來試用列錶框小部件:
>>> 贏 = Tk()
>>> lb = Listbox(win, height=3)
>>> 磅包()
>>> lb.insert(END, “第一個條目”)
>>> lb.insert(END, “第二個條目”)
>>> lb.insert(END, “第三個條目”)
>>> lb.insert(END, “第四個條目”)
您可以在列表的開頭、中間和結尾插入項目。 你也可以刪除它們。 如果列表中的項目太多,可以添加滾動條:
>>> sb = 滾動條(win, orient=VERTICAL)
>>> sb.pack(邊=左,填充=Y)
為了使我們的滾動條正常工作,我們必須使用回調函數:
>>> sb.configure(command=lb.yview)
>>> lb.configure(yscrollcommand=sb.set)
當您在列錶框中選擇項目時,curselection 方法會向您返回一個項目。 如果您不選擇任何項目,它將返回一個空元組。
步驟#8:最後的步驟
我們將使用我們在 Tkinter 教程中學到的所有東西來創建電話列表編輯器:
總碼
#!/usr/bin/env python3
從 tkinter 導入 *
從手機導入 *
def which_selected():
print(“在 {0}”.format(select.curselection()))
返回整數(select.curselection()[0])
def add_entry():
phonelist.append([fnamevar.get(), lnamevar.get(), phonevar.get()])
設置選擇()
定義更新入口():
phonelist[which_selected()] = [fnamevar.get(),
lnamevar.get(),
phonevar.get()]
定義刪除條目():
del phonelist[which_selected()]
設置選擇()
def load_entry():
fname, lname, phone = phonelist[which_selected()]
fnamevar.set(fname)
lnamevar.set(lname)
phonevar.set(電話)
def make_window():
全局 fnamevar、lnamevar、phonevar、選擇
贏 = Tk()
幀1 =幀(贏)
frame1.pack()
Label(frame1, text=”First Name”).grid(row=0, column=0, sticky=W)
fnamevar = StringVar()
fname = Entry(frame1, textvariable=fnamevar)
fname.grid(行=0,列=1,粘性=W)
Label(frame1, text=”Last Name”).grid(row=1, column=0, sticky=W)
lnamevar = StringVar()
lname = Entry(frame1, textvariable=lnamevar)
lname.grid(行=1,列=1,粘性=W)
標籤(frame1, text=”Phone”).grid(row=2, column=0,sticky=W)
phonevar = StringVar()
電話 = 條目(框架 1,文本變量 = 電話變量)
phone.grid(行=2,列=1,粘性=W)
frame2 = Frame(win) # 按鈕行
frame2.pack()
b1 = Button(frame2, text="添加", command=add_entry)
b2 = Button(frame2, text=”Update”, command=update_entry)
b3 = Button(frame2, text=”Delete”, command=delete_entry)
b4 = Button(frame2, text=”Load”, command=load_entry)
b5 = Button(frame2, text=”Refresh”, command=set_select)
b1.pack(邊=左)
b2.pack(邊=左)
b3.pack(邊=左)
b4.pack(邊=左)
b5.pack(邊=左)
frame3 = Frame(win) # 選擇名稱
frame3.pack()
滾動=滾動條(frame3,方向=垂直)
select = Listbox(frame3, yscrollcommand=scroll.set, height=6)
scroll.config(command=select.yview)
滾動包(邊=右,填充=Y)
select.pack(邊=左,填充=兩者,展開=1)
贏回
定義集選擇():
phonelist.sort(key=lambda 記錄:記錄[1])
選擇.刪除(0,結束)
對於電話列表中的 fname、lname、電話:
select.insert(END, “{0}, {1}”.format(lname, fname))
贏 = make_window()
設置選擇()
win.mainloop()
以下是電話清單:
phonelist = [['克里斯','邁耶斯','241-343-4349'],
['羅伯特','史密斯','202-689-1234'],
['珍妮特','瓊斯','609-483-5432'],
['拉爾夫','巴恩哈特','215-683-2341'],
['埃里克','納爾遜','571-485-2689'],
['福特','Prefect','703-987-6543'],
['瑪麗','齊格勒','812-567-8901'],
['鮑勃','史密斯','856-689-1234']]
我們在這里分享的程序就是一個例子。 您可以使用我們在本 Tkinter 教程中討論的功能創建程序。 上述程序缺少一些功能,例如它沒有保存任何更改的選項。 您可以通過創建可執行此任務的按鈕自行添加保存功能。
必讀: Python教程中的馬爾可夫鏈
了解有關 Python 和 Python GUI 項目的更多信息
如果您知道自己在做什麼,那麼在 Python Tkinter 項目上工作會非常有趣。 它們也是了解您的強項(和弱點)的好方法。 您可以了解有關 Python 的更多信息; 我們建議前往我們的博客。 以下是一些供進一步閱讀的資源:
- 10 個 Python GUI 項目
- 如何用 Python 製作聊天機器人
- 42個Python項目想法
你對這個項目有什麼想法? 你參與過其他 Python Tkinter 項目嗎? 讓我們知道。
如果您想了解數據科學,請查看 IIIT-B 和 upGrad 的數據科學執行 PG 計劃,該計劃是為在職專業人士創建的,提供 10 多個案例研究和項目、實用的實踐研討會、行業專家的指導、1與行業導師一對一,400 多個小時的學習和頂級公司的工作協助。
Python 適合創建圖形用戶界面嗎?
Python 有許多圖形用戶界面框架,從 Tkinter 到許多其他跨平台解決方案,以及特定於平台的綁定。 當 Python 與 Tkinter 結合使用時,創建圖形用戶界面既快速又簡單。 Python 非常適合創建 GUI,因為它有很多內置的小部件,它可以快速生成窗口,具有強大的事件處理技術,並且具有基本的繪圖功能。
Tkinter 或 KIVY:哪個更好用?
Kivy 是一個免費的開源 Python 框架,用於創建或設計獨特但吸引人的用戶界面程序。 如果您是一個喜歡創建應用程序的 Python 開發人員,那麼 KIVY 是創建更多動態應用程序的絕佳選擇。 Tkinter 是使用最廣泛的 Python 接口,用於快速輕鬆地開發 GUI 應用程序。 如果您是 Python 新手並想學習如何創建計算機界面,請從 Tkinter 開始並學習基礎知識。