溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎樣理解Qt For Python的模塊結(jié)構(gòu)

發(fā)布時(shí)間:2021-10-11 18:43:47 來(lái)源:億速云 閱讀:155 作者:柒染 欄目:大數(shù)據(jù)

這篇文章將為大家詳細(xì)講解有關(guān)怎樣理解Qt For Python的模塊結(jié)構(gòu),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

在安裝完成PyQt5/PySide2之后,我們先不急著開始進(jìn)行Python圖形界面的編程。因?yàn)楝F(xiàn)在我們對(duì)PyQt5和PySide2還一無(wú)所知。


PyQt5和PySide2都是QT圖形界面開發(fā)包的Python封裝模塊,它們最大程度地利用Python編程語(yǔ)言還原了QT在原生C++下實(shí)現(xiàn)的功能和定義。所以我們使用PyQt5或是PySide2都可以較完整地在Python編程語(yǔ)言中完成QT的圖形界面應(yīng)用開發(fā)。


同時(shí),由于PyQt5和PySide2的發(fā)展歷史、授權(quán)協(xié)議等有所差異,所以我們?cè)诖私ㄗh大家對(duì)兩者進(jìn)行如下選擇:


  • 如果只是想快速學(xué)習(xí)在Python中進(jìn)行圖形界面編程或者開發(fā)的是開源非商業(yè)用途的圖形界面應(yīng)用程序,那么推薦大家選擇PyQt5;

  • 如果開發(fā)的圖形界面應(yīng)用程序未來(lái)可能用作商業(yè)用途,那么建議大家使用PyQt5進(jìn)行開發(fā),然后將其轉(zhuǎn)換為PySide2代碼,最后進(jìn)行打包;

  • PySide2在Qt官方的大力支持下,各方面已經(jīng)越來(lái)越完善,可以嘗試完全使用PySide2。


所以在《一看就懂的Python圖形界面編程》系列教程中,為了方便演示,我們使用PyQt5進(jìn)行知識(shí)點(diǎn)示例代碼的講解。如果有讀者對(duì)PySide2的代碼有需求,可以自行替換。


(對(duì)于大多數(shù)子模塊而言,只需要簡(jiǎn)單的將模塊引入中的PyQt5替換為PySide2即可,其他特殊模塊則可以參考官網(wǎng)文檔說(shuō)明)。


在開始使用PyQt5/PySide2進(jìn)行Python圖形界面編程之前,我們先來(lái)了解一些我們即將使用的圖形界面開發(fā)模塊的結(jié)構(gòu)。就像對(duì)房屋進(jìn)行裝修之前,只有對(duì)房屋的結(jié)構(gòu)、構(gòu)成有了了解,才能更好的進(jìn)行施工。


PyQt5/PySide2作為一個(gè)大型的模塊,不像一些小的模塊只有極少數(shù)的子類和方法屬性,其擁有大量的子模塊、定義和對(duì)象,如果不對(duì)其全局的結(jié)構(gòu)有一個(gè)了解,就會(huì)陷入不知從何開始的困局。


一、PyQt5/PySide2的子模塊


在安裝完成PyQt5/PySide2之后,我們就可以在IDE或代碼編輯器中通過from……import……,或直接的import對(duì)其進(jìn)行引入使用了。


在IDE中使用from語(yǔ)法引入PyQt5/PySide2,代碼如下所示:

   
     
   
   
   
from PyQt5 import Q
           

如果你使用的IDE或代碼編輯器有智能提示功能,那么就會(huì)顯示PyQt5模塊下的以Q開頭的子模塊,如下圖所示:

 


怎樣理解Qt For Python的模塊結(jié)構(gòu)

因?yàn)镼T模塊的風(fēng)格就是子模塊都是Q開頭,所以IDE智能提示中顯示的子模塊基本上包含了PyQt5中所有的子模塊。


這些子模塊包含但不限于以下模塊:


 
QtCore,QtWidgets,QtGui,QAxContainer,QtBluetooth,QtDBus,QtDesigner,QtHelp,QtLocation,QtMultimedia,QtMultimediaWidgets,QtNetwork,QtNetworkAuth,QtNfc,QtOpenGL,QtPositioning,QtPrintSupport,QtQml,QtQuick,QtQuickWidgets,QtRemoteObjects,QtSensors,QtSerialPort,QtSql,QtSvg,QtTest,QtWebChannel,QtWebSockets,QtWinExtras,QtXml,QtXmlPatterns
 
在這些模塊中,大致可以分為以下幾個(gè)類別:
 
  • 基礎(chǔ)模塊,這一類的模塊都是通用且核心的,對(duì)于大多數(shù)的QT應(yīng)用程序來(lái)說(shuō)都是用得著的模塊;

  • QT功能模塊,這一類模塊是用于具體用途和功能開發(fā)所使用到的模塊;

  • QT工具模塊,這類模塊屬于QT提供的用于提高圖形界面開發(fā)效率的工具;


怎樣理解Qt For Python的模塊結(jié)構(gòu)

下面我們分別來(lái)認(rèn)識(shí)一下幾類模塊。


 

、通用基礎(chǔ)模塊——房屋的基石


在PyQt5的通用基礎(chǔ)模塊中,又分為核心基礎(chǔ)模塊和一般性基礎(chǔ)模塊。這個(gè)其實(shí)很好理解,核心基礎(chǔ)模塊,相當(dāng)于一棟房子的地基、承重梁、水泥磚頭等等,用于搭建起房屋的基本結(jié)構(gòu);

怎樣理解Qt For Python的模塊結(jié)構(gòu)

屬于基礎(chǔ)模塊的子模塊有以下模塊:

  • QtCore:這個(gè)是PyQt5中的其他模塊使用到的核心非圖形類。這個(gè)模塊就像是建造房屋的地基和鋼筋,為健壯的圖形界面程序提供核心且強(qiáng)大的功能支持,其提供了諸如線程(QThread、QThreadPool)、動(dòng)畫(QAbstractAnimation)、事件響應(yīng)(pyqtSignal、pyqtSlot、QEvent)、輸入/輸出對(duì)象(QSettings、QFileinfo)等功能。一個(gè)使用PyQt5編寫的圖形界面程序可以不使用QtCore模塊,但是一個(gè)PyQt5編寫的強(qiáng)大圖形界面程序,肯定會(huì)使用到QtCore模塊。

  • QtGui:這個(gè)是PyQt5中圖形用戶界面組件的基類。其提供了用于圖形窗口集成、圖形事件處理、2D圖形圖像、字體和文本的子類。有諸如圖形拖放(QDrag、QDropEvent)、圖像顯示(QBitmap、QImage)、字體定義(QFont)、顏色定義(QColor)、繪筆(QPen)等等的子類,類似于建造房屋時(shí)的墻面修砌。

  • QtWidget:這個(gè)是PyQt5中擴(kuò)展了QtGui模塊的控件模塊,所謂控件模塊,就是其提供了大量的控件及其布局類。這就相當(dāng)于房子里面客廳、廚房、陽(yáng)臺(tái)、臥室,以及其中的各種家具、擺件、電器、設(shè)備等等。我們?cè)趫D形界面編程過程中會(huì)使用到大量的QtWidget中的子類,圖形界面程序中的窗口、按鈕、輸入框、文本框、選擇框、布局等等都是使用它的子類。如同建造房子,我們沒有地基(QtCore)、不用水泥砌墻(QtGui),也能用木板和樹葉(QtWidget)搭建出一個(gè)簡(jiǎn)易的小屋出來(lái)。

怎樣理解Qt For Python的模塊結(jié)構(gòu)

  上述的三個(gè)子模塊,是PyQt5中傳統(tǒng)圖形界面程序編程涉及到的核心模塊。


注意:我們知道,原生的Qt使用的是C++語(yǔ)言進(jìn)行圖形界面的開發(fā),從Qt4.7開始,Qt中引入了一種新的圖形界面開發(fā)語(yǔ)言——QML作為原生QT開發(fā)語(yǔ)言C++的替代品,同時(shí)其構(gòu)建了一套名為QtQuick的類庫(kù),用于使用自定義圖形界面來(lái)構(gòu)建高度動(dòng)態(tài)的圖形界面應(yīng)用程序。


其屬于Qt開發(fā)的另一個(gè)分支,Qt的Python封裝包中也包含了相關(guān)的模塊支持,但是在本系列教程中,我們只使用傳統(tǒng)Qt圖形界面開發(fā)的模塊。


我們?cè)賮?lái)看看功能模塊。


 

、功能模塊——擴(kuò)展房屋屬性


在功能模塊中,也分為基礎(chǔ)功能模塊和其他功能模塊。


基礎(chǔ)功能模塊,其重要程度低于核心基礎(chǔ)模塊,但是又高于其他功能模塊。隨著時(shí)代的發(fā)展,需求的變動(dòng),一個(gè)功能模塊可能會(huì)升級(jí)為基礎(chǔ)功能模塊,也有可能降級(jí)為其他功能模塊。同理,一個(gè)其他功能模塊也有可能變?yōu)榛A(chǔ)功能模塊。


就像幾十年前,家家戶戶通上電是一個(gè)追求的目標(biāo),網(wǎng)絡(luò)也只是家庭才有的配置。而現(xiàn)在,每家每戶都有電,并且網(wǎng)絡(luò)已經(jīng)成為了標(biāo)配。

怎樣理解Qt For Python的模塊結(jié)構(gòu)

在當(dāng)前版本,基礎(chǔ)功能模塊包含了如下模塊:

  • QtMultimedia:一個(gè)多媒體模塊,提供對(duì)音頻、視頻、無(wú)線電廣播和相機(jī)功能的支持;

  • QtMultimediaWidgets:一個(gè)用于實(shí)現(xiàn)多媒體功能的控件模塊,提供了設(shè)計(jì)視頻和攝像頭額外的控件支持,其擴(kuò)展了QtMultimedia和QtWidget模塊的功能;

上述兩個(gè)功能模塊都是用來(lái)實(shí)現(xiàn)多媒體功能的。


  • QtNetwork:一個(gè)用于實(shí)現(xiàn)網(wǎng)絡(luò)編程的模塊,使得在Qt圖形界面中進(jìn)行網(wǎng)絡(luò)編程變得更加方便;

  • QtSQL:一個(gè)用于在Qt中使用SQL對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作的模塊;

  • QtTest:一個(gè)用于對(duì)Qt圖形界面程序進(jìn)行單元測(cè)試的模塊;


上面我們說(shuō)過,基礎(chǔ)功能模塊和其他功能模塊就像電和網(wǎng)絡(luò)一樣,在不同的時(shí)期的重要性會(huì)有不同的變化。

怎樣理解Qt For Python的模塊結(jié)構(gòu)

無(wú)論其變化幾何,這些模塊終究是為了擴(kuò)展圖形界面程序的功能而生。下面我們來(lái)看看PyQt5中的部分其他功能模塊:


  • QtNfc:這個(gè)模塊提供了對(duì)近場(chǎng)通信(NFC)硬件進(jìn)行訪問的支持;

  • QtWebEngine:這個(gè)模塊借助開源的Chromium瀏覽器項(xiàng)目,在圖形界面應(yīng)用程序中嵌入Web瀏覽功能;

  • QtWebSocket:這個(gè)模塊為圖形界面程序提供了WebSocket通信的功能;

  • QtSvg:這個(gè)模塊提供了用于顯示SVG文件內(nèi)容的相關(guān)功能;


對(duì)功能模塊的細(xì)分并不需要特別嚴(yán)謹(jǐn),因?yàn)閺哪撤N程度而言,除了核心模塊之外的模塊都屬于功能模塊。核心模塊用于打好圖形界面程序的基礎(chǔ),功能模塊無(wú)論是基礎(chǔ)功能還是其他功能,都是用于實(shí)現(xiàn)圖形界面程序的功能,一個(gè)定義為其他功能模塊的模塊在自己的圖形界面編程過程中的使用頻率和重要程度都高于一個(gè)基礎(chǔ)功能模塊。所以大家靈活運(yùn)用即可。


 

、工具模塊


Qt的工具模塊主要是為了方便開發(fā)人員對(duì)圖形界面程序進(jìn)行設(shè)計(jì)和開發(fā),其提供了Qt設(shè)計(jì)師(QtDesigner)這個(gè)圖形化的程序設(shè)計(jì)工具,能夠便捷地利用鼠標(biāo)拖拽來(lái)快速繪制程序的界面和基礎(chǔ)的事件響應(yīng)。


為了便于大家對(duì)PyQt5各個(gè)模塊代碼的理解,本系列教程將不使用Qt設(shè)計(jì)師來(lái)設(shè)計(jì)和繪制圖形界面,有需要的讀者可以自行下載安裝使用QT設(shè)計(jì)師。

關(guān)于怎樣理解Qt For Python的模塊結(jié)構(gòu)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI