欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

你等待的Python Qt GUI來啦!順帶送干貨:從Qt C++類庫到

系統 1624 0

上周給大家推薦了新書Python Qt GUI與數據可視化編程,受到了廣大讀者的青睞,很多人問我何時上架?什么時間預訂?能不能給發完整目錄?需要這種知識很久了等回應。今天可以告訴大家,這本書上架啦!!!!

你等待的Python Qt GUI來啦!順帶送干貨:從Qt C++類庫到PyQt5_第1張圖片

【京東購買】【當當購買】

本書介紹在Python中使用PyQt5和其他模塊進行GUI和數據可視化編程的方法。第一部分介紹PyQt5設計GUI程序的基本框架,包括GUI應用程序的基本結構、窗體UI可視化設計與窗體業務邏輯的設計、信號與槽的特點和使用等。第二部分介紹GUI程序設計中一些主要功能模塊的使用,包括基本界面組件、事件處理、數據庫、繪圖、多媒體等。第三部分先介紹使用PyQtChart和PyQtDataVisualization進行二維和三維數據可視化設計的方法,再介紹將Matplotlib嵌入PyQt5 GUI應用程序窗口界面中進行數據可視化的編程方法。通過研讀本書,讀者可以掌握使用PyQt5、PyQtChart、Matplotlib等模塊進行GUI應用程序和數據可視化設計的方法。

本書適合具有Python編程基礎,并想通過Python設計GUI應用程序或在GUI應用程序中實現數據可視化的讀者閱讀和參考。

干貨截選:2.6 從Qt C++類庫到PyQt5

2.6.1 幫助信息的查找

1.在Qt Creator中查找幫助信息

安裝PyQt5時不會安裝完整的類庫幫助文檔,PyQt5的在線Reference Guide提供了PyQt5使用中的一些關鍵技術問題的說明,但是關于具體的某個類的信息并不完整,不如Qt官網上的幫助文檔信息全面。

要離線獲取一個類的詳細幫助信息,可以使用Qt Creator的幫助窗口。例如,在Qt Creator的幫助窗口里搜索QSpinBox,其資料頁面如圖2-32所示,這里有對QSpinBox類的簡單說明和主要特性的示例代碼,列出了其所有的屬性、類型定義、公共接口函數、公共槽函數、信號等,并且可以查看每一項的詳細資料。

你等待的Python Qt GUI來啦!順帶送干貨:從Qt C++類庫到PyQt5_第2張圖片

圖2-32 在Qt Creator的幫助窗口查找類的詳細信息

Qt類庫包含的類很多,具體到某個特定的類,其屬性、接口函數、信號也很多,不可能全部介紹或列出來。對任何一種編程語言來說,其自帶的幫助文檔的信息都是最全面最準確的,學習時要善于查找幫助信息。

2.在Python中查找幫助信息

PyQt5安裝后雖然沒有Qt Creator里那樣詳細的類庫幫助文檔,但是可以通過Python的一些基本指令獲取類或函數的內置幫助信息。例如,dir()指令可以顯示一個類的所有接口信息;help()指令可以顯示一個類的詳細接口定義或一個函數的原型定義。

例如,要在Python Shell里查看QSpinBox的幫助信息,可執行下面的指令:

            ?
          
  1. >>> from PyQt5.QtWidgets import QSpinBox
  2. >>> dir(QSpinBox)

指令dir(QSpinBox)會列出QSpinBox的所有屬性和方法的名稱,包括所有從父類繼承的屬性和方法。

            ?
          
  1. >>> help(QSpinBox)

指令help(QSpinBox)會更詳細地列出QSpinBox類的所有屬性和方法,它會先列出QSpinBox類里新定義的屬性和方法,然后依次列出父類的屬性和方法。接口函數(即方法)會顯示輸入輸出參數定義。

help()指令也可以顯示一個方法的函數原型(如QSpinBox.setValue()函數)的幫助信息:

            ?
          
  1. >>> help(QSpinBox.setValue)
  2. Help on built-in function setValue:
  3. setValue(...)
  4. setValue(self, int)

其中的最后一行表示setValue()函數需要一個int類型的輸入參數,沒有返回值。self是Python中所有類的接口函數的第一個參數,不看作函數參數。

            ?
          
  1. >>> help (QSpinBox.value)
  2. Help on built-in function value:
  3. value(...)
  4. value(self) -> int

上面顯示的是QSpinBox.value()函數的幫助信息,最后一行表示value()函數返回一個int類型的數據,沒有輸入參數。

PyQt5的內置幫助信息雖然不詳細、查閱不方便,但是可以提供最準確的信息,特別是在函數的輸入輸出參數定義上。對于某些類或函數,Qt C++類庫中的定義和PyQt5中的定義有差異,應該以PyQt5的定義為準。

2.6.2 正確導入模塊中的類

1.PyQt5的常用模塊

PyQt5是Qt C++類庫的一個Python綁定,它包含了很多模塊,在PyQt5安裝后的目錄“D:\Python37\Lib\site-packages\PyQt5”里可以看到所有模塊的文件。在前面的示例程序中已經用到了QtWidgets、QtCore、QtGui等模塊,PyQt5中常用的幾個模塊如表2-5所示。

表2-5 PyQt5中常用的模塊

PyQt5模塊名 主要功能 包含的類示例
QtCore 提供核心的非GUI功能的類,包括常用的名稱空間Qt QFile、QDir、QTimer等Qt中的非界面組件類 包含各種枚舉類型的名稱空間Qt pyqtSlot、pyQtSignal等在PyQt5中引入的函數
QtGui 提供GUI設計中用于窗口系統集成、事件處理、繪圖等功能的類 QIcon、QFont、QPixMap、QCloseEvent、QPalette、QPainter等GUI底層實現類
QtWidgets 提供GUI設計中所有窗體顯示的類,包括各種窗體、標準對話框、按鈕、文本框等組件 QMainWindow、QWidget、QDialog等窗體 QColorDialog、QFileDialog等標準對話框 QRadioButton、QSpinBox、QMenu等界面組件
QtMultimedia 提供音頻、視頻、攝像頭操作的類 QCamera、QAudioInput、QMedaiPlayer等
QtMultimediaWidgets 提供多媒體窗體顯示的類 QCameraViewfinder、QVideoWidget等
QtSql 提供SQL數據庫驅動、數據查詢和操作的類 QSqlDatabase、QSqlQuery、QSqlRecord等

2.查找類所在的模塊

在Python程序里用到某個PyQt5的類時,需要用import語句導入這個類,例如在前面的示例程序中用過這樣的導入語句:

            ?
          
  1. from PyQt5.QtWidgets import QApplication, QWidget
  2. from PyQt5.QtCore import pyqtSlot, pyqtSignal
  3. from PyQt5.QtGui import QIcon

因為Qt的類一般都以大寫字母Q開頭作為類名,與Python自帶的類或其他程序包的類有很好的區分度,所以一般導入具體的類,然后在程序里直接使用這個類。

盡量不要使用類似于這樣的導入語句:

            ?
          
  1. from PyQt5.QtWidgets import *

這樣雖然可以導入PyQt5.QtWidgets中的所有類并且直接使用,但是會導入很多不需要用到的類,這可能使程序運行變慢。

對于一個具體的類,如何知道它屬于哪個模塊呢?例如,對于類QPalette,如何知道它屬于哪個模塊,從而使用正確的import語句呢?

Qt C++的類庫也是以模塊組織的,Qt C++類庫中的模塊與PyQt5中的模塊基本是對應的,可以在Qt Creator的幫助頁面查找一個類的詳細資料來查到其屬于哪個模塊。例如,QPalette類的幫助信息的基本描述如圖2-33所示,其中有一行是:

            ?
          
  1. qmake: QT += gui

這表明在Qt C++類庫中,QPalette是屬于gui模塊的,那么在PyQt5中對應的模塊就是PyQt5.QtGui,所以導入語句應該是:

            ?
          
  1. from PyQt5.QtGui import QPalette

Qt幫助文檔中qmake語句常見的描述與PyQt5模塊的對應關系如表2-6所示。

表2-6 Qt幫助文檔里的qmake描述與PyQt5模塊的對應關系

Qt幫助中qmake描述 對應的PyQt5模塊 示例導入語句
QT += core QtCore from PyQt5.QtCore import QDateTime from PyQt5.QtCore import Qt
QT += gui QtGui from PyQt5.QtGui import QIcon
QT += widgets QtWidgets from PyQt5.QtWidgets import QFileDialog
QT += multimedia QtMultimedia from PyQt5.QtMultimedia import QAudioInput
QT += multimediawidgets QtMultimediaWidgets from PyQt5.QtMultimediaWidgets import QVideoWidget
QT += sql QtSql from PyQt5.QtSql import QSqlQuery

2.6.3 部分類和接口函數的差異

PyQt5中大部分類的接口函數,以及每個函數的輸入輸出參數定義與Qt C++類庫中的是一致的,所以在Qt Creator中查詢幫助信息就可以知道類的接口或一個函數的輸入輸出參數。

但是有少量PyQt5的類或接口函數與Qt C++類庫中的是不一樣的。例如,對于QDataStream類,Qt C++類庫中使用流操作符“>>”和“<<”實現各種類型數據的輸入和輸出,但是PyQt5中的QDataStream類沒有這兩個流操作符,而是定義了很多接口函數進行各種數據的輸入和輸出(詳見9.3節)。

另外,有少量函數的接口在PyQt5和Qt C++中的定義不一樣。例如,QFileDialog類的getOpenFileName()在Qt C++中的函數原型(省略了輸入參數)是:

            ?
          
  1. QString getOpenFileName(…);

而用help()指令查看的PyQt5中的函數原型(省略了輸入參數)是:

            ?
          
  1. getOpenFileName(…) -> Tuple[str, str]

getOpenFileName()函數在Qt C++和PyQt5中的輸入參數相同,所以上面都省略了輸入參數的顯示。但是在Qt C++中,getOpenFileName()函數只返回一個選擇的文件名,而在PyQt5中,getOpenFileName()返回一個Tuple類型的數據,第一個str類型數據是選擇的文件名,第二個str類型數據是使用的文件過濾器。如果直接按照Qt C++中的函數原型在Python中使用QFileDialog.getOpenFileName()函數就會出現問題。

在Qt C++類庫和PyQt5之間存在差異的類和接口函數并不多,但如果不知道這些差異,按照Qt C++類庫的接口定義來使用PyQt5中的相應類或函數就會出現問題。例如,只根據Qt幫助文檔里的函數原型使用PyQt5中的類或函數,或者是熟悉Qt C++類庫使用的讀者根據經驗使用這些有差異的類或函數。

下面是整理的本書示例程序或使用PyQt5過程中遇到過的有差異的類或函數,這不是覆蓋整個PyQt5的清單,不全面,但是可以讓讀者遇到此類問題時避免落入陷阱耗費時間。下面整理的內容只是列出了這些有差異的類或函數,并做簡單說明,至于具體的差異之處,書中示例程序中涉及的地方會有具體說明。讀者在用到以下這些類或函數時,也可以查閱Qt C++幫助文檔和PyQt5內置幫助信息來明確這些差異之處。

(1)QDataStream類:接口函數存在較大差異,Qt C++中使用流操作符“>>”和“<<”,PyQt5中使用大量的接口函數替代流操作符。

(2)QFileDialog類:三個類函數getOpenFileName()、getOpenFileNames()、getSaveFileName()的返回數據有差異。Qt C++中只返回文件名或文件名列表,而PyQt5中返回的是一個Tuple類型的數據,第一個元素是文件名或文件名列表,第二個元素是使用的文件名過濾器。

(3)QFontDialog類:類函數getFont()的輸入參數、返回數據有差異。

(4)QInputDialog類:getText()、getInt()等類函數返回數據有差異。

(5)QMediaRecorder類:supportedAudioSampleRates()函數返回數據有差異。

2.6.4 數據類型對應關系

C++是強制類型定義的語言,Python是動態數據類型語言,而且兩種語言之間的數據類型有一些差異。例如對于字符串數據,Python有內建的str類型,而Qt C++中使用QString類。

Qt C++類庫轉換為PyQt5后,某些Qt C++中的數據類型與Python中的數據類型存在對應關系,知道這些常見的對應關系后,就可以根據Qt Creator里查到的Qt C++函數原型迅速知道Python中的函數原型,從而正確使用這些函數。

1.枚舉型常數

Qt C++的名稱空間(namespace)Qt包含大量的枚舉類型的定義,例如,表示預定義顏色的枚舉類型:

            ?
          
  1. enum Qt::GlobalColor

其部分枚舉值有Qt::white、Qt::black、Qt::red、Qt::blue等。

PyQt5.QtCore模塊中的類Qt對應于Qt C++類庫中的名稱空間Qt,這些枚舉類型常量都通過類屬性訪問,例如預定義顏色常量Qt.white、Qt.red等。

在Qt C++中,也經常在類里定義枚舉類型,例如QPalette類定義的用于表示顏色角色的枚舉類型:

            ?
          
  1. enum QPalette::ColorRole

其部分枚舉值有QPalette::Window、QPalette::Text等。

在PyQt5中,對應的枚舉類型就是QPalette.ColorRole,而這些枚舉類型常量作為類屬性訪問,也就是QPalette.Window、QPalette.Text等。

2.Qt C++中的QString與Python的str類型

PyQt5中沒有QString類型,Qt C++中的QString會被自動轉換為Python的str類型,例如,C++中的一個函數返回值是QString類型:

            ?
          
  1. QString QFileDialog::getExistingDirectory(…);

在PyQt5中的返回值就是str類型:

            ?
          
  1. getExistingDirectory(…) -> str

由于返回結果是Python的str類型,不能使用QString的接口函數對返回結果進行處理,而應該使用Python的str類型的接口函數。

3.列表類型

在Qt C++中用QList 定義類型為type的數據列表,而在Python中有內建的list數據類型,所以,Qt C++中的QList 在PyQt5中對應的是list[type]數據。例如,Qt C++中用于表示字符串列表的是QStringList類,在PyQt5中沒有這個類,而是轉換為list[str]數據。

例如,Qt C++中QFileDialog.getOpenFileNames()函數用于返回選擇的多個文件的列表,其C++函數原型定義(省略了輸入參數)是:

            ?
          
  1. QStringList getOpenFileNames(…);

而在PyQt5的內置幫助信息顯示的函數原型(省略了輸入參數)是:

            ?
          
  1. getOpenFileNames(…) -> Tuple[List[str], str]

其返回數據是Tuple類型,第一個數據List[str]是選擇的文件名稱字符串列表,第二個str數據是使用的文件過濾器。所以,這里還存在Qt C++與PyQt5函數參數不一致的問題。

既然返回的結果是list[str],就應該用Python的list數據處理的方法,例如:

            ?
          
  1. fileList,flt=QFileDialog.getOpenFileNames(self,"選擇多個文件",
  2. "", "Images(*.jpg)")
  3. if (len(fileList)<1): #fileList是字符串列表
  4. return
  5. for i in range(len(fileList)):
  6. print(fileList[i])

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲一区二区在线视频 | 亚洲美女视频 | 欧美电影网| 亚洲午夜在线观看 | 青青热久久国产久精品秒播 | 久久久一区二区 | 毛片一区二区 | 日韩欧美国产精品 | 国产精品成人无码A片免费网址 | 激情婷婷小说 | 亚洲综合久久伊人热 | 亚洲日本一区二区三区 | 天天干天天爱天天操 | 婷婷综合影院 | 2018天天操夜夜操 | 亚洲一二三在线 | 国产91久久最新观看地址 | 亚洲一二三 | 精品一区二区三区18 | 香蕉香蕉国产片一级一级毛片 | 欧美三级中文字幕hd | 三级黄色免费观看 | 久久草在线视频 | 欧美自拍视频在线 | 欧美影院久久 | 葫芦娃污视频 | 精品亚洲一区二区三区 | 亚洲成人av一区二区 | 久久久综合九色合综国产 | 国产99999| 午夜精品老牛av一区二区三区 | 国产亚洲精品一区二区 | 国产一国产一有一级毛片 | 九九热国产在线 | 蜜桃精品久久久久久久免费影院 | 中文字幕乱码一区二区三区 | 秋霞日韩久久理论电影 | 无码免费一区二区三区免费播放 | 热久久免费视频 | 天天操天天操天天操天天操 | 久久综合玖玖爱中文字幕 |