首頁 > 軟體

基於Python的GUI圖形化使用者介面程式設計詳細講解

2022-12-29 14:00:52

前言    

在最早程式的設計中,程式和使用者的互動都是通過控制檯來完成的,而GUI(Graphics User Interface),即圖形使用者程式設計,是Python 所提供的一個豐富的元件,可以快速的實現使用圖形介面和使用者互動。

常用的GUI庫

1.Tkinter

tkinter(TK interface)是Python內建的標準GUI庫,支援跨平臺的GUI程式開發,tkinter 適合小型的GUI程式編寫,也特別適合初學者學習GUI程式設計。

2.wxPython

wxPython是比較流行的GUI庫,適合大型應用程式開發,功能強於tkinter,整體設計框架類似於MFC(Microsoft Foundation Classes 微軟基礎類庫)。

3.PyQT

Qt是一種開源的GUI庫,適合大型GUI程式開發,PyQT是Qt工具包標準的Python實現,我們可以使用Qt Dseginer 介面設計器快速開發GUI應用程式。

基於tkinter模組建立GUI程式步驟

1.建立應用程式主視窗物件——通過類Tk的無參建構函式

from tkinter import *
from tkinter import messagebox
 
root = Tk()

2.在主視窗中,新增各種視覺化元件,比如:按鈕(Button) 文字方塊(Label)等。

btn01 = Button(root)
btn01["text"] = "創作不易,點個贊再走唄"

3.通過幾何佈局管理器,管理元件的大小和位置

btn01.pack()

4.事件處理

通過繫結事件處理程式,響應使用者操作所觸發的事件(比如:單擊、雙擊等)

def dianzai(e):
    messagebox.showinf("Message","點個贊,讓你關注我")
    print("點一個贊")
    
btn01.bind("<Button>",dainzan)

主視窗設定

主視窗位置和大小

通過geometry(wxh +/- x +/- y)進行設定,w為寬度,h為高度。+x表示距螢幕左邊的距離,-x表示距螢幕右邊的距離,+y表示螢幕上邊的距離,-y表示螢幕下邊的距離。表示寬度500,高度300,距左邊100個畫素,距上邊100個畫素。

root.title = ("來點贊呀")   # 建立標題
root.geometry("500x300+100+100")

基於上述功能,程式碼實現如下:

from tkinter import *
from tkinter import messagebox
 
root = Tk()  # 建立主視窗
root.title = ("來點贊呀")   # 建立標題列
root.geometry("500x300+100+100")
btn01 = Button(root)  # 建立一個btn01物件設定,將視窗放進去
 
btn01["text"] = "創作不易,點個贊再走唄"
btn01.pack()  # 呼叫佈局管理器,將元件物件合理的放入視窗中
 
 
def dian_zan(e):  # e 封裝的事件物件
    messagebox.showinfo("Message", "點個贊")
    print("點個贊")
 
 
btn01.bind("<Button>", dian_zan)  # 繫結事件
 
root.mainloop()  # 呼叫元件的mainloop()方法,進入事件迴圈

顯示如下:

GUI程式設計整體描述 

圖形化使用者介面是由一個個元件組成的,有的元件還能在元件裡邊放置其他的元件,我們成為容器,Tkinter GUI元件關係如下:

接下來,我們在程式碼中檢視物件的繼承關係圖,以button為例:ctrl + 滑鼠左鍵,跳入button中,然後滑鼠右鍵,檢視繼承結構圖如下:

常用元件彙總列表

TKinter類名稱簡介
Toplevel頂層容器類,可用於為其他元件提供單獨的容器;Toplevel有點類似於視窗
Button按鈕代表按鈕元件
Canvas畫布提供繪圖功能,包括直線、矩形、橢圓、多邊形、點陣圖等。
Checkbutton核取方塊可供使用者勾選的核取方塊
Entry單行輸入框使用者可輸入內容
Frame容器用於載入其它GUI元件
Label標籤用於顯示不可編輯的文字或圖示
LabelFrame容器也是容器元件,類似於Frame,但他支援新增標題
Listbox列表框列出多個選項,供使用者選擇
Menu選單選單元件
Menubutton選單按鈕用來包含選單的按鈕(包括下拉式、層疊式等)
OptionMenu選單按鈕Menubutton的子類,也代表選單按鈕,可通過按鈕開啟一個選單
Message選單按鈕類似於標籤,但是可以顯示多行文字,後來當Label也能顯示

GUI應用程式類的經典寫法

GUI應用程式的主要結構,採用的物件導向的方式,更加合理的組織程式碼,方便日後的維護。通過類Application組織整個GUI程式,類Application繼承了Frame及通過繼承擁有了父類別的特徵,通過建構函式_init_()初始化視窗中的物件,通過createWidgets()方法建立視窗中的物件。Frame框架是一個tkinter元件,表示一個矩形的區域。Frame一般作為容器使用,可以放置其他元件,從而實現複雜的佈局。

"""
測試一個經典的GUI程式的寫法,使用物件導向的方式
"""
from tkinter import *
from tkinter import messagebox
 
class Application(Frame):
    """物件導向"""
 
    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
 
        # 建立一個退出程式
        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()

總結

到此這篇關於基於Python的GUI圖形化使用者介面程式設計的文章就介紹到這了,更多相關Python GUI圖形化使用者介面程式設計內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com