Python基礎之GUI編程

圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指採用圖形方式顯示的計算機操做用戶界面。相比於命令行模式,更加方便用戶操做,加強用戶體驗。本文以一個簡單的登陸窗口爲例,簡述GUI(圖形化用戶界面)編程的相關知識點,僅供學習分享使用,若有不足之處,還請指正。html

涉及知識點

Tkinter 是 Python 的標準 GUI 庫。Python 使用 Tkinter 能夠快速的建立 GUI 應用程序。因爲 Tkinter 是內置到 python 的安裝包中、只要安裝好 Python 以後就能 import Tkinter 庫、並且 IDLE 也是用 Tkinter 編寫而成、相關知識點以下:python

  • Tk:定義一個圖形化窗口,其中title用於設置標題,geometry用於設置大小,位置,mainloop方法用於顯示界面。
  • Label: 定義一個文本顯示標籤,用戶沒法修改內容
  • Entry: 定義一個文本框,用戶能夠輸入內容。
  • Button:按鈕,能夠綁定單擊事件,響應用戶的操做。
  • pack:佈局方式的一種,默認一行一個元素,居中顯示,能夠設置anchor來設置對齊方式。

登陸功能分析與設計

  • 需求描述:
    • 用戶須要輸入用戶名密碼,而後點擊登陸按鈕進行登陸。
  • 程序設計:
    • 須要兩個文本框用於輸入用戶名和密碼,以及對應的標籤
    • 須要一個登陸按鈕並在單擊時響應對應事件。
    • 登陸事件須要對輸入的用戶名密碼進行校驗。如不合法,須要進行提示。
    • 頁面佈局須要友好溫馨,符合大衆審美。

程序實現步驟

如何實現一個簡單的登陸窗口,操做步驟以下:編程

1. 定義一個空白窗口,以下所示:

1 from tkinter import * # 引入tkinter包
2 
3 app = Tk()  # 定義一個界面
4 app.mainloop() # 顯示頁面

默認狀況下,定義的窗口會顯示與屏幕左上方,且標題爲空,以下所示:app

2. 添加標題,並設置頁面大小和位置,以下所示:

1 app = Tk()  # 定義一個界面
2 app.title(string='Alan.hsiang>>>系統登陸')  # 設置標題
3 app.geometry('400x300+300+400')  # 大小座標設置格式 =widthxheight+x+y
4 app.mainloop()

添加標題和設置大小位置後,效果以下所示:ide

 3. 添加頁面組成元素

當空頁面建立完成後,須要爲頁面添加元素(用戶名,密碼,登陸按鈕等),以下所示:函數

 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

4. 變動頁面佈局方式

默認的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)

執行結果以下所示:學習

5. 繼續優化佈局 

經過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後,效果以下所示:

 

6. 添加事件 

當初步完成頁面佈局後,下面開始完善功能,爲按鈕添加事件。

經過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()
View Code

關於更多Tkinter相關內容,能夠參考菜鳥教程,裏面有更詳盡的介紹。

備註

臨江仙·夜登小閣憶洛中舊遊

【做者】陳與義  【朝代】宋
憶昔午橋橋上飲,坐中可能是豪英。長溝流月去無聲。杏花疏影裏,吹笛到天明。 二十餘年如一夢,此身雖在堪驚。閒登小閣看新晴。古今多少事,漁唱起三更。
相關文章
相關標籤/搜索