天天看點

PyQt5+QtDesigner編寫攝像頭界面程式(一)——pyqt5、qtdesigner安裝和環境設定

目錄

    • 前言
    • PyQt+QtDesigner及相關插件的安裝和設定
    • 1、PyQt、QtDesigner及其它工具包的安裝
    • 2、将QtDesigner和PyUIC連結到PyCharm的外部工具庫
    • 3、界面設計測試小程式

前言

最近工作需要寫一個界面程式來調用攝像頭并對攝像頭采集的圖像做一些處理。程式需要使用Python語言編寫,經過調研發現PyQt5配合QtDesigner在界面程式編寫方面具有功能豐富、入門簡單的優點,适合我這種程式設計的小白。PyQt5雖然入門比較簡單,但對于我這種小白來講還是挺有難度的,學習過程中也費了不少的力氣,是以在這裡總結一下程式編寫的過程,友善以後回顧,也友善有需要的童鞋借鑒。

我工作中使用的是USB接口輸入的Flir相機,結合序列槽輸出将相機和其它硬體組成閉環回路。這裡介紹的是一個簡化版的界面程式,它調用的是筆記本自帶的攝像頭,實作的功能就是實時顯示攝像頭的圖像,并且可以設定攝像頭的曝光、增益、亮度、顔色等參數,程式比較簡單而且對硬體要求較低,非常适合初學者。

由于内容比較多,我将它分成5個部分介紹,分别為:PyQt+QtDesigner及opencv等工具的安裝與設定;基于QtDesigner的界面設計;主程式的編寫;筆記本攝像頭的讀取、顯示和參數控制;exe可執行程式的生成。下面介紹第一部分。

PyQt+QtDesigner及相關插件的安裝和設定

我使用PyCharm作為程式的編寫界面,python的版本是3.6,筆記本的作業系統是win10。這部分内容包括PyQt5+QtDesigner以及其它工具包的安裝、将QtDesigner和PyUIC連結到PyCharm的外部工具庫、使用QtDesigner生成ui檔案并将其轉換成py檔案并編寫主函數來顯示該界面。

1、PyQt、QtDesigner及其它工具包的安裝

PyQt和QtDesigner的安裝和連結到PyCharm的方法可參考連結:

Pycharm+Python+PyQt5使用

我是參照該連結學習,并根據自己的需要做了一些修改,下面介紹一下我的安裝過程。

1)安裝PyQt5、QtDesigner、PyUIC、opencv等工具

(在此之前,需要先完成python和pip工具的安裝)

打開cmd視窗,輸入

pip install pyqt5
           

電腦會自動下載下傳并安裝合适版本的pyqt5.

完成後,再輸入

pip install pyqt5-tools
           

自動完成QtDesigner和PyUIC等的安裝。

除此之外,我在程式編寫過程中還用到了opencv和qimage2ndarray子產品,最後如果想生成exe可執行檔案則還需要安裝pyinstaller,其安裝指令分别為:

pip install opencv-python
           
pip install qimage2ndarray
           
pip install pyinstaller
           

至此,所有用到的子產品都安裝完成。

2、将QtDesigner和PyUIC連結到PyCharm的外部工具庫

QtDesigner與PyCharm的連結見下圖所示:點選PyCharm的File->Settings->Tools->External tools打開外部工具界面,點‘+’号進入添加外部工具界面。在‘Name’處輸入工具名稱,這個名稱可以随便取,隻要自己清楚就行,我這裡寫的是Qt designer。然後,找到安裝的designer.exe所在的路徑(一般在python安裝目錄下的Lib\site-packages\pyqt5_tools檔案夾裡),将其路徑複制到‘Programs’處,注意要包含designer.exe的檔案名。Working directory處設定自己的工作路徑,qtdesigner生成的ui檔案會預設儲存在該路徑。‘Arguments’不用設定,确認即可。

PyQt5+QtDesigner編寫攝像頭界面程式(一)——pyqt5、qtdesigner安裝和環境設定

接下來,按同樣的方法添加pyuic,pyuic用于将qtdesigner生成的.ui檔案轉換成python可以識别的.py檔案。其設定過程如下圖所示,Programs處輸入python.exe所在的路徑和檔案名,Arguments處輸入:

-m PyQt5.uic.pyuic -o $FileNameWithoutExtension$.py $FileName$
           

在Working directory處輸入:

$FileDir$
           

這樣生成的py檔案就會和被轉換的ui檔案位于相同的檔案夾下。點選ok完成設定。

PyQt5+QtDesigner編寫攝像頭界面程式(一)——pyqt5、qtdesigner安裝和環境設定

設定完成後就可以在PyCharm的Tools->External Tools菜單下看到我們新添加的工具了。

PyQt5+QtDesigner編寫攝像頭界面程式(一)——pyqt5、qtdesigner安裝和環境設定

3、界面設計測試小程式

打開PyCharm,選擇菜單File->New Project建立一個工程項目,如下圖所示,輸入該項目的路徑和名稱,這裡設定項目名稱為PyQtTest。

PyQt5+QtDesigner編寫攝像頭界面程式(一)——pyqt5、qtdesigner安裝和環境設定

完成後,單擊Tools->External Tools->Qt designer打開QtDesigner。

QtDesigner打開後會自動彈出建立視窗的對話框,如果沒有彈出的話可以單擊File->New來打開該對話框。如下圖所示,選擇Main Windows,然後單擊Create來建立一個主視窗。

PyQt5+QtDesigner編寫攝像頭界面程式(一)——pyqt5、qtdesigner安裝和環境設定

QtDesigner打開後的界面如下圖所示,我用紅框标出了四個常用的區域,左上角的區域顯示了我們界面視窗所有使用的控件清單和對應的名稱;左下角區域是所有可用的控件庫;中間是工作區,我們可以将控件從控件庫拖拽到工作區來組合我們的程式界面;右側區域為控件屬性設定區,在我們單擊選中某一個控件後,它的屬性就會在這裡顯示出來,我們也可以在這裡對控件的屬性進行修改。

PyQt5+QtDesigner編寫攝像頭界面程式(一)——pyqt5、qtdesigner安裝和環境設定

在左下角的控件菜單中找到Push Button,用滑鼠左鍵将其拖到中間區域,然後單擊File->Save as,将目前界面儲存到我們剛建立的PyQtTest項目檔案夾下,檔案名設為QtTest.ui。

儲存完成後,回到PyCharm中,可以看到我們的PyQtTest項目下多了一個QtTest.ui檔案。滑鼠右鍵單擊該檔案調出右鍵菜單,單擊External tools->PyUIC,程式會調用pyuic,将ui檔案轉換為py檔案,執行完成後就會在該項目中生成一個QtTest.py檔案了。打開QtTest.py檔案會發現,裡面隻有一個Ui_MainWindow類,沒有主程式,我們需要自己編寫一個主程式來調用Ui_MainWindow類。由于QtTest.py是通過pyuic自動生成的,當我們在qtdesigner中對程式界面進行修改,并重新生成QtTest.py時,裡面原來的内容會被全部覆寫掉,是以我們盡量不要在QtTest.py中添加自己的代碼,而是建立一個py檔案來調用QtTest.py中的類,将自己的代碼都放在新建立的檔案中。

PyQt5+QtDesigner編寫攝像頭界面程式(一)——pyqt5、qtdesigner安裝和環境設定

接下來右鍵單擊PyQtTest項目,選擇New->Python File建立一個Python檔案,檔案名設為’QtUi.py’,打開該檔案輸入如下代碼:

from QtTest import Ui_MainWindow
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow

class CamShow(QMainWindow,Ui_MainWindow):
    def __init__(self,parent=None):
        super(CamShow,self).__init__(parent)
        self.setupUi(self)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui=CamShow()
    ui.show()
    sys.exit(app.exec_())
           

然後在代碼區單擊右鍵選擇Run QtUi,執行該代碼,即可顯示出我們在QtDesigner中設計的程式界面了。

PyQt5+QtDesigner編寫攝像頭界面程式(一)——pyqt5、qtdesigner安裝和環境設定

本節介紹了PyQt、QtDesigner、PyUIC以及Opencv等工具的安裝和PyCharm的外部工具配置,并簡單介紹了從程式界面設計到最終程式運作的流程。下一節将詳細介紹使用QtDesigner設計攝像頭程式界面的過程。