圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指採用圖形方式顯示的計算機操做用戶界面。相比於命令行模式,更加方便用戶操做,加強用戶體驗。本文以一個簡單的登陸窗口爲例,簡述GUI(圖形化用戶界面)編程的相關知識點,僅供學習分享使用,若有不足之處,還請指正。html
Tkinter 是 Python 的標準 GUI 庫。Python 使用 Tkinter 能夠快速的建立 GUI 應用程序。因爲 Tkinter 是內置到 python 的安裝包中、只要安裝好 Python 以後就能 import Tkinter 庫、並且 IDLE 也是用 Tkinter 編寫而成、相關知識點以下:python
如何實現一個簡單的登陸窗口,操做步驟以下:編程
1 from tkinter import * # 引入tkinter包 2 3 app = Tk() # 定義一個界面 4 app.mainloop() # 顯示頁面
默認狀況下,定義的窗口會顯示與屏幕左上方,且標題爲空,以下所示:app
1 app = Tk() # 定義一個界面 2 app.title(string='Alan.hsiang>>>系統登陸') # 設置標題 3 app.geometry('400x300+300+400') # 大小座標設置格式 =widthxheight+x+y 4 app.mainloop()
添加標題和設置大小位置後,效果以下所示:ide
當空頁面建立完成後,須要爲頁面添加元素(用戶名,密碼,登陸按鈕等),以下所示:函數
1 app = Tk() # 定義一個界面 2 app.title(string='Alan.hsiang>>>系統登陸') # 設置標題 3 app.geometry('400x300+300+400') # 大小座標設置格式 =widthxheight+x+y 4 name_label = Label(master=app, text='用戶名') # Label用於顯示文本內容,且用戶沒法修改 5 pwd_label = Label(master=app, text='密碼') # master 用於表示對象屬於哪一個容器 6 name_entry = Entry(master=app) # 文本框,用戶能夠進行輸入 7 pwd_entry = Entry(master=app, show='*') # 密碼框,顯示密文,以*代替 8 login_btn = Button(master=app, text='登陸') # 登陸按鈕 9 name_label.pack(anchor=W) # pack 方式佈局,默認爲居中 ,一個元素一行 anchor用於設置對齊方式 10 name_entry.pack(anchor=W) 11 pwd_label.pack(anchor=W) 12 pwd_entry.pack(anchor=W) 13 login_btn.pack(anchor=W) 14 app.mainloop()
執行結果,以下所示:oop
默認的pack佈局方式,是比較醜的,下面採用grid方式進行佈局,以下所示:佈局
1 name_label.grid(row=0,column=0) # grid 方式佈局,經過設置行列的方式佈局,從0開始 2 name_entry.grid(row=0,column=1) 3 pwd_label.grid(row=1,column=0) 4 pwd_entry.grid(row=1,column=1) 5 login_btn.grid(row=2,column=1)
執行結果以下所示:學習
經過grid佈局後,雖然看起來比較接近,可是元素距離左邊太近,且控件以前太擁擠,沒有空隙,能夠經過設置padx,pady來改變,以下所示:優化
1 name_label.grid(row=0, column=0, padx=20, pady=20) # grid 方式佈局,經過設置行列的方式佈局,從0開始 2 name_entry.grid(row=0, column=1) 3 pwd_label.grid(row=1, column=0) 4 pwd_entry.grid(row=1, column=1) 5 login_btn.grid(row=2, column=1, pady=20, stick=E) # stick表示靠哪邊對齊,經過N(北)S(南)W(西)E(東)來表示
設置padx,pady後,效果以下所示:
當初步完成頁面佈局後,下面開始完善功能,爲按鈕添加事件。
經過command屬性添加事件,以下所示:
1 # 由於python是順序執行,因此login函數定義必須在綁定事件前面 2 def login(): 3 name = name_entry.get() 4 pwd = pwd_entry.get() 5 if name == '' or pwd == '': 6 messagebox.showerror(title='錯誤', message='用戶名和密碼都不能爲空!!!') 7 else: 8 if name == 'admin' and pwd == '123': 9 messagebox.showinfo(title='成功', message='登陸成功') 10 else: 11 messagebox.showerror(title='錯誤', message='用戶名和密碼錯誤!!!') 12 13 14 login_btn = Button(master=app, text='登陸', width=8, command=login) # 登陸按鈕
執行效果以下:
用戶名和密碼爲空時,點擊按鈕,提示錯誤信息
當輸入正確的用戶名密碼時,提示成功,以下樹所示:
整個示例比較簡單,屬於基礎入門知識,代碼以下所示:
1 from tkinter import * # 引入tkinter包 2 from tkinter import messagebox # 引入對話框包 3 4 app = Tk() # 定義一個界面 5 app.title(string='Alan.hsiang>>>系統登陸') # 設置標題 6 app.geometry('400x300+300+400') # 大小座標設置格式 =widthxheight+x+y 7 name_label = Label(master=app, text='用戶名') # Label用於顯示文本內容,且用戶沒法修改 8 pwd_label = Label(master=app, text='密碼') # master 用於表示對象屬於哪一個容器 9 10 name_entry = Entry(master=app) # 文本框,用戶能夠進行輸入 11 pwd_entry = Entry(master=app, show='*') # 密碼框,顯示密文,以*代替 12 13 14 # 由於python是順序執行,因此login函數定義必須在綁定事件前面 15 def login(): 16 name = name_entry.get() 17 pwd = pwd_entry.get() 18 if name == '' or pwd == '': 19 messagebox.showerror(title='錯誤', message='用戶名和密碼都不能爲空!!!') 20 else: 21 if name == 'admin' and pwd == '123': 22 messagebox.showinfo(title='成功', message='登陸成功') 23 else: 24 messagebox.showerror(title='錯誤', message='用戶名和密碼錯誤!!!') 25 26 27 login_btn = Button(master=app, text='登陸', width=8, command=login) # 登陸按鈕 28 29 # name_label.pack(anchor=W) # pack 方式佈局,默認爲居中 ,一個元素一行 anchor用於設置對齊方式 30 # name_entry.pack(anchor=W) 31 # pwd_label.pack(anchor=W) 32 # pwd_entry.pack(anchor=W) 33 # login_btn.pack(anchor=W) 34 35 name_label.grid(row=0, column=0, padx=20, pady=20) # grid 方式佈局,經過設置行列的方式佈局,從0開始 36 name_entry.grid(row=0, column=1) 37 pwd_label.grid(row=1, column=0) 38 pwd_entry.grid(row=1, column=1) 39 login_btn.grid(row=2, column=1, pady=20, stick=E) # stick表示靠哪邊對齊,經過N(北)S(南)W(西)E(東)來表示 40 41 # login_btn.bind('<Button-1>', func=login) # 綁定事件 42 43 app.mainloop()
關於更多Tkinter相關內容,能夠參考菜鳥教程,裏面有更詳盡的介紹。
臨江仙·夜登小閣憶洛中舊遊