有時候我們想讓編寫的Python程序擁有一個圖形操作界面,而不是只能在命令行中進行操作,這時我們就需要編寫界面。Python有pyqt,wxpython這些庫,而tkinter是Python自帶的可用于GUI編程的庫,當(dāng)我們對界面的要求沒有那么高,想要快速又方便地實現(xiàn)一個簡易的GUI的時候,tkinter這個小巧的庫是一個不錯的選擇。
主體窗口
一下語句實現(xiàn)了一個沒有任何元素的主體窗口:
from tkinter import *
root = Tk()
root.mainloop()
效果如下:

基本窗口
在窗口中添加各種元素
在上面程序的基礎(chǔ)上,在root = Tk()和root.mainloop()之間添加下面的代碼以在窗口中添加元素
- 窗口標(biāo)題:
root.wm_title("title_a") - 添加窗口圖標(biāo):
root.iconbitmap(icon_file),icon_file就是一個.ico的圖標(biāo)文件,使用絕對或相對路徑 - 設(shè)置窗口大小:
root.geometry("x_WIDTHx_HEIGHT"),其中將_WIDTH替換為窗口寬度,將_HEIGHT替換為窗口高度 - 設(shè)置窗口在屏幕上的位置:
root.geometry("+X+Y"),X/Y表示以屏幕左上角為頂點的窗口的坐標(biāo) - 添加標(biāo)簽(即不可修改的文本):
label1=Label(root,text="this is a label"),定義完了之后,還不會在窗口中顯示,必須加上label1.pack()才行,窗口中各個元素的顯示順序是按執(zhí)行pack的順序,下面的按鈕,輸入框等等都需要進行pack。定義label的時候還可以指定其他屬性,寫成label1=Label(root,text="this is a label",font="16",background="red")這樣就行了 - 添加按鈕:
button1=Button(root,text="confirm",command=func),其中的func表示按下按鈕之后要執(zhí)行的函數(shù),注意這個func是不帶任何參數(shù)的。按鈕還有一個比較常用的屬性是state,分為normal和DISABLED,后者顯示出來的按鈕無法按下 - 輸入框:
entry1=Entry(root),如果想在輸入框中預(yù)先添加默認(rèn)的文字,使用entry1.insert(END,"text"),insert的第一個參數(shù)指定了從哪里開始填入text,還可以:entry1.insert(0,"text")
如圖是一個簡單的使用tkinter編寫的GUI界面:

tkinter簡易效果
獲取各個元素的值和屬性
- 獲取和更改元素的屬性:直接使用屬性名來索引,比如獲取Label的一些屬性:
label1["text"],也可以進行修改;也可以使用label1.config(text="text1")來修改屬性 - 獲取輸入框的文字:
entry1.get()
其他有用操作
- 打開“選擇文件”的對話框:
filename = filedialog.askopenfilename();“選擇文件夾”:directory = filedialog.askdirectory()(要先from tkinter import filedialog) - 設(shè)置右鍵菜單:
menu=Menu(root)
menu.add_command(label="Start",command=start)
root.bind("",popmenu)
def popmenu(event):
menu.post(event.x_root, event.y_root)
- 刷新窗口狀態(tài):
root.update() - 銷毀窗口:
root.destroy() - 自動觸發(fā)事件:
label1.after(sec,command),表示多少秒以后自動執(zhí)行command - 單選框:
v = IntVar() #或 v=StringVar()
r1 = Radiobutton(root,text="",variable=v,value=...)
之后使用v.get()就可以獲得“value”值,就可以判斷哪個單選框被選中了
- 置頂窗口:
root.wm_attributes('-topmost',1) - 隱藏窗口外部:
root.overrideredirect(True) - 運行:可直接將后綴改為
.pyw雙擊運行,也可以用pyinstaller用“-w”方法打包之后運行時就不會彈出命令行