基于Python的GUI圖形用戶(hù)界面編程詳細(xì)講解
前言
在最早程序的設(shè)計(jì)中,程序和用戶(hù)的交互都是通過(guò)控制臺(tái)來(lái)完成的,而GUI(Graphics User Interface),即圖形用戶(hù)編程,是Python 所提供的一個(gè)豐富的組件,可以快速的實(shí)現(xiàn)使用圖形界面和用戶(hù)交互。
常用的GUI庫(kù)
1.Tkinter
tkinter(TK interface)是Python內(nèi)置的標(biāo)準(zhǔn)GUI庫(kù),支持跨平臺(tái)的GUI程序開(kāi)發(fā),tkinter 適合小型的GUI程序編寫(xiě),也特別適合初學(xué)者學(xué)習(xí)GUI編程。
2.wxPython
wxPython是比較流行的GUI庫(kù),適合大型應(yīng)用程序開(kāi)發(fā),功能強(qiáng)于tkinter,整體設(shè)計(jì)框架類(lèi)似于MFC(Microsoft Foundation Classes 微軟基礎(chǔ)類(lèi)庫(kù))。
3.PyQT
Qt是一種開(kāi)源的GUI庫(kù),適合大型GUI程序開(kāi)發(fā),PyQT是Qt工具包標(biāo)準(zhǔn)的Python實(shí)現(xiàn),我們可以使用Qt Dseginer 界面設(shè)計(jì)器快速開(kāi)發(fā)GUI應(yīng)用程序。
基于tkinter模塊創(chuàng)建GUI程序步驟
1.創(chuàng)建應(yīng)用程序主窗口對(duì)象——通過(guò)類(lèi)Tk的無(wú)參構(gòu)造函數(shù)
from tkinter import * from tkinter import messagebox root = Tk()
2.在主窗口中,添加各種可視化組件,比如:按鈕(Button) 文本框(Label)等。
btn01 = Button(root) btn01["text"] = "創(chuàng)作不易,點(diǎn)個(gè)贊再走唄"
3.通過(guò)幾何布局管理器,管理組件的大小和位置
btn01.pack()
4.事件處理
通過(guò)綁定事件處理程序,響應(yīng)用戶(hù)操作所觸發(fā)的事件(比如:?jiǎn)螕?、雙擊等)
def dianzai(e):
messagebox.showinf("Message","點(diǎn)個(gè)贊,讓你關(guān)注我")
print("點(diǎn)一個(gè)贊")
btn01.bind("<Button>",dainzan)主窗口設(shè)置
主窗口位置和大小
通過(guò)geometry(wxh +/- x +/- y)進(jìn)行設(shè)置,w為寬度,h為高度。+x表示距屏幕左邊的距離,-x表示距屏幕右邊的距離,+y表示屏幕上邊的距離,-y表示屏幕下邊的距離。表示寬度500,高度300,距左邊100個(gè)像素,距上邊100個(gè)像素。
root.title = ("來(lái)點(diǎn)贊呀") # 建立標(biāo)題
root.geometry("500x300+100+100")基于上述功能,代碼實(shí)現(xiàn)如下:
from tkinter import *
from tkinter import messagebox
root = Tk() # 創(chuàng)建主窗口
root.title = ("來(lái)點(diǎn)贊呀") # 建立標(biāo)題欄
root.geometry("500x300+100+100")
btn01 = Button(root) # 建立一個(gè)btn01對(duì)象設(shè)置,將窗口放進(jìn)去
btn01["text"] = "創(chuàng)作不易,點(diǎn)個(gè)贊再走唄"
btn01.pack() # 調(diào)用布局管理器,將組件對(duì)象合理的放入窗口中
def dian_zan(e): # e 封裝的事件對(duì)象
messagebox.showinfo("Message", "點(diǎn)個(gè)贊")
print("點(diǎn)個(gè)贊")
btn01.bind("<Button>", dian_zan) # 綁定事件
root.mainloop() # 調(diào)用組件的mainloop()方法,進(jìn)入事件循環(huán)顯示如下:

GUI編程整體描述
圖形用戶(hù)界面是由一個(gè)個(gè)組件組成的,有的組件還能在組件里邊放置其他的組件,我們成為容器,Tkinter GUI組件關(guān)系如下:

接下來(lái),我們?cè)诖a中查看對(duì)象的繼承關(guān)系圖,以button為例:ctrl + 鼠標(biāo)左鍵,跳入button中,然后鼠標(biāo)右鍵,查看繼承結(jié)構(gòu)圖如下:

常用組件匯總列表
| TKinter類(lèi) | 名稱(chēng) | 簡(jiǎn)介 |
| Toplevel | 頂層 | 容器類(lèi),可用于為其他組件提供單獨(dú)的容器;Toplevel有點(diǎn)類(lèi)似于窗口 |
| Button | 按鈕 | 代表按鈕組件 |
| Canvas | 畫(huà)布 | 提供繪圖功能,包括直線(xiàn)、矩形、橢圓、多邊形、位圖等。 |
| Checkbutton | 復(fù)選框 | 可供用戶(hù)勾選的復(fù)選框 |
| Entry | 單行輸入框 | 用戶(hù)可輸入內(nèi)容 |
| Frame | 容器 | 用于加載其它GUI組件 |
| Label | 標(biāo)簽 | 用于顯示不可編輯的文本或圖標(biāo) |
| LabelFrame | 容器 | 也是容器組件,類(lèi)似于Frame,但他支持添加標(biāo)題 |
| Listbox | 列表框 | 列出多個(gè)選項(xiàng),供用戶(hù)選擇 |
| Menu | 菜單 | 菜單組件 |
| Menubutton | 菜單按鈕 | 用來(lái)包含菜單的按鈕(包括下拉式、層疊式等) |
| OptionMenu | 菜單按鈕 | Menubutton的子類(lèi),也代表菜單按鈕,可通過(guò)按鈕打開(kāi)一個(gè)菜單 |
| Message | 菜單按鈕 | 類(lèi)似于標(biāo)簽,但是可以顯示多行文本,后來(lái)當(dāng)Label也能顯示 |
GUI應(yīng)用程序類(lèi)的經(jīng)典寫(xiě)法
GUI應(yīng)用程序的主要結(jié)構(gòu),采用的面向?qū)ο蟮姆绞?,更加合理的組織代碼,方便日后的維護(hù)。通過(guò)類(lèi)Application組織整個(gè)GUI程序,類(lèi)Application繼承了Frame及通過(guò)繼承擁有了父類(lèi)的特征,通過(guò)構(gòu)造函數(shù)_init_()初始化窗口中的對(duì)象,通過(guò)createWidgets()方法創(chuàng)建窗口中的對(duì)象。Frame框架是一個(gè)tkinter組件,表示一個(gè)矩形的區(qū)域。Frame一般作為容器使用,可以放置其他組件,從而實(shí)現(xiàn)復(fù)雜的布局。
"""
測(cè)試一個(gè)經(jīng)典的GUI程序的寫(xiě)法,使用面向?qū)ο蟮姆绞?
"""
from tkinter import *
from tkinter import messagebox
class Application(Frame):
"""面向?qū)ο?""
def _int_(self,master=None):
super()._init_(master) # super()代表的是父類(lèi)的定義,而不是父類(lèi)對(duì)象
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)建一個(gè)退出程序
self.btnQuit = Button(self,text="退出",command=root.destroy)
self.btnQuit.pack()
def dianzan(self):
messagebox.showinfo("Message", "點(diǎn)個(gè)贊")
print("點(diǎn)個(gè)贊")
root = Tk()
root.geometry("400x300+100+200")
root.title("點(diǎn)贊")
app = Application(master=root)
root.mainloop()總結(jié)
到此這篇關(guān)于基于Python的GUI圖形用戶(hù)界面編程的文章就介紹到這了,更多相關(guān)Python GUI圖形用戶(hù)界面編程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python實(shí)現(xiàn)的按要求生成手機(jī)號(hào)功能示例
這篇文章主要介紹了python實(shí)現(xiàn)的按要求生成手機(jī)號(hào)功能,涉及Python流程控制、隨機(jī)數(shù)操作及數(shù)學(xué)運(yùn)算相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2019-10-10
python實(shí)現(xiàn)尋找最長(zhǎng)回文子序列的方法
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)尋找最長(zhǎng)回文子序列的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
Python實(shí)現(xiàn)滑塊驗(yàn)證碼詳解
驗(yàn)證碼作為一種自然人的機(jī)器人的判別工具,被廣泛的用于各種防止程序做自動(dòng)化的場(chǎng)景中。傳統(tǒng)的字符型驗(yàn)證安全性已經(jīng)名存實(shí)亡的情況下,各種新型的驗(yàn)證碼如雨后春筍般涌現(xiàn),今天給大家分享一篇Python實(shí)現(xiàn)滑塊驗(yàn)證碼2022-05-05
python 編碼中為什么要寫(xiě)類(lèi)型注解?
這篇文章主要介紹了python 編碼中為什么要寫(xiě)類(lèi)型注解,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-03-03
Python實(shí)現(xiàn)求數(shù)列和的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)求數(shù)列和的方法,涉及Python數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
利用django model save方法對(duì)未更改的字段依然進(jìn)行了保存
這篇文章主要介紹了利用django model save方法對(duì)未更改的字段依然進(jìn)行了保存,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03
python爬蟲(chóng)請(qǐng)求庫(kù)httpx和parsel解析庫(kù)的使用測(cè)評(píng)
這篇文章主要介紹了python爬蟲(chóng)請(qǐng)求庫(kù)httpx和parsel解析庫(kù)的使用測(cè)評(píng),幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下2021-05-05
深入理解Python內(nèi)置函數(shù)map filter reduce及與列表推導(dǎo)式對(duì)比
這篇文章主要為大家介紹了Python內(nèi)置函數(shù)map filter reduce及與列表推導(dǎo)式對(duì)比方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06

