基于Python的GUI圖形用戶界面編程詳細(xì)講解
前言
在最早程序的設(shè)計中,程序和用戶的交互都是通過控制臺來完成的,而GUI(Graphics User Interface),即圖形用戶編程,是Python 所提供的一個豐富的組件,可以快速的實現(xiàn)使用圖形界面和用戶交互。
常用的GUI庫
1.Tkinter
tkinter(TK interface)是Python內(nèi)置的標(biāo)準(zhǔn)GUI庫,支持跨平臺的GUI程序開發(fā),tkinter 適合小型的GUI程序編寫,也特別適合初學(xué)者學(xué)習(xí)GUI編程。
2.wxPython
wxPython是比較流行的GUI庫,適合大型應(yīng)用程序開發(fā),功能強于tkinter,整體設(shè)計框架類似于MFC(Microsoft Foundation Classes 微軟基礎(chǔ)類庫)。
3.PyQT
Qt是一種開源的GUI庫,適合大型GUI程序開發(fā),PyQT是Qt工具包標(biāo)準(zhǔn)的Python實現(xiàn),我們可以使用Qt Dseginer 界面設(shè)計器快速開發(fā)GUI應(yīng)用程序。
基于tkinter模塊創(chuàng)建GUI程序步驟
1.創(chuàng)建應(yīng)用程序主窗口對象——通過類Tk的無參構(gòu)造函數(shù)
from tkinter import * from tkinter import messagebox root = Tk()
2.在主窗口中,添加各種可視化組件,比如:按鈕(Button) 文本框(Label)等。
btn01 = Button(root) btn01["text"] = "創(chuàng)作不易,點個贊再走唄"
3.通過幾何布局管理器,管理組件的大小和位置
btn01.pack()
4.事件處理
通過綁定事件處理程序,響應(yīng)用戶操作所觸發(fā)的事件(比如:單擊、雙擊等)
def dianzai(e): messagebox.showinf("Message","點個贊,讓你關(guān)注我") print("點一個贊") btn01.bind("<Button>",dainzan)
主窗口設(shè)置
主窗口位置和大小
通過geometry(wxh +/- x +/- y)進行設(shè)置,w為寬度,h為高度。+x表示距屏幕左邊的距離,-x表示距屏幕右邊的距離,+y表示屏幕上邊的距離,-y表示屏幕下邊的距離。表示寬度500,高度300,距左邊100個像素,距上邊100個像素。
root.title = ("來點贊呀") # 建立標(biāo)題 root.geometry("500x300+100+100")
基于上述功能,代碼實現(xiàn)如下:
from tkinter import * from tkinter import messagebox root = Tk() # 創(chuàng)建主窗口 root.title = ("來點贊呀") # 建立標(biāo)題欄 root.geometry("500x300+100+100") btn01 = Button(root) # 建立一個btn01對象設(shè)置,將窗口放進去 btn01["text"] = "創(chuàng)作不易,點個贊再走唄" btn01.pack() # 調(diào)用布局管理器,將組件對象合理的放入窗口中 def dian_zan(e): # e 封裝的事件對象 messagebox.showinfo("Message", "點個贊") print("點個贊") btn01.bind("<Button>", dian_zan) # 綁定事件 root.mainloop() # 調(diào)用組件的mainloop()方法,進入事件循環(huán)
顯示如下:
GUI編程整體描述
圖形用戶界面是由一個個組件組成的,有的組件還能在組件里邊放置其他的組件,我們成為容器,Tkinter GUI組件關(guān)系如下:
接下來,我們在代碼中查看對象的繼承關(guān)系圖,以button為例:ctrl + 鼠標(biāo)左鍵,跳入button中,然后鼠標(biāo)右鍵,查看繼承結(jié)構(gòu)圖如下:
常用組件匯總列表
TKinter類 | 名稱 | 簡介 |
Toplevel | 頂層 | 容器類,可用于為其他組件提供單獨的容器;Toplevel有點類似于窗口 |
Button | 按鈕 | 代表按鈕組件 |
Canvas | 畫布 | 提供繪圖功能,包括直線、矩形、橢圓、多邊形、位圖等。 |
Checkbutton | 復(fù)選框 | 可供用戶勾選的復(fù)選框 |
Entry | 單行輸入框 | 用戶可輸入內(nèi)容 |
Frame | 容器 | 用于加載其它GUI組件 |
Label | 標(biāo)簽 | 用于顯示不可編輯的文本或圖標(biāo) |
LabelFrame | 容器 | 也是容器組件,類似于Frame,但他支持添加標(biāo)題 |
Listbox | 列表框 | 列出多個選項,供用戶選擇 |
Menu | 菜單 | 菜單組件 |
Menubutton | 菜單按鈕 | 用來包含菜單的按鈕(包括下拉式、層疊式等) |
OptionMenu | 菜單按鈕 | Menubutton的子類,也代表菜單按鈕,可通過按鈕打開一個菜單 |
Message | 菜單按鈕 | 類似于標(biāo)簽,但是可以顯示多行文本,后來當(dāng)Label也能顯示 |
GUI應(yīng)用程序類的經(jīng)典寫法
GUI應(yīng)用程序的主要結(jié)構(gòu),采用的面向?qū)ο蟮姆绞?,更加合理的組織代碼,方便日后的維護。通過類Application組織整個GUI程序,類Application繼承了Frame及通過繼承擁有了父類的特征,通過構(gòu)造函數(shù)_init_()初始化窗口中的對象,通過createWidgets()方法創(chuàng)建窗口中的對象。Frame框架是一個tkinter組件,表示一個矩形的區(qū)域。Frame一般作為容器使用,可以放置其他組件,從而實現(xiàn)復(fù)雜的布局。
""" 測試一個經(jīng)典的GUI程序的寫法,使用面向?qū)ο蟮姆绞? """ from tkinter import * from tkinter import messagebox class Application(Frame): """面向?qū)ο?"" def _int_(self,master=None): super()._init_(master) # super()代表的是父類的定義,而不是父類對象 self.master = master self.pack() self.createWidget() def createWidget(self): self.btn01 = Button(self) self.btn01["text"] = "哈哈哈哈哈哈哈" self.btn01.pack() self.btn01["command"] = self.dianzan # 創(chuàng)建一個退出程序 self.btnQuit = Button(self,text="退出",command=root.destroy) self.btnQuit.pack() def dianzan(self): messagebox.showinfo("Message", "點個贊") print("點個贊") root = Tk() root.geometry("400x300+100+200") root.title("點贊") app = Application(master=root) root.mainloop()
總結(jié)
到此這篇關(guān)于基于Python的GUI圖形用戶界面編程的文章就介紹到這了,更多相關(guān)Python GUI圖形用戶界面編程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用django model save方法對未更改的字段依然進行了保存
這篇文章主要介紹了利用django model save方法對未更改的字段依然進行了保存,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03python爬蟲請求庫httpx和parsel解析庫的使用測評
這篇文章主要介紹了python爬蟲請求庫httpx和parsel解析庫的使用測評,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-05-05深入理解Python內(nèi)置函數(shù)map filter reduce及與列表推導(dǎo)式對比
這篇文章主要為大家介紹了Python內(nèi)置函數(shù)map filter reduce及與列表推導(dǎo)式對比方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06