1. 程式人生 > >樹莓派Pi3+Qt5.3.2安裝PyQt5

樹莓派Pi3+Qt5.3.2安裝PyQt5

安裝環境說明:樹莓派3(Raspberry Pi3——RASPBIAN JESSIE WITH PIXEL)+Qt5.3.2+Python2.7.9+

樹莓派3帶Qt5.3.2的安裝包,需要自己手動從apt-get中下載

一、安裝SIP

SIP的官網上下載 SIP安裝包,版本號為4.17。
這裡有一點比較重要的是必須安裝這個及以下的版本,因為最新版(如4.19.2)裡面的一些名字有改動,用這樣的包直接安裝,會報錯。其中一條如下:

error: ‘pyqt5ClassTypeDef’ does not name a type

因為新版本的包把這個定義的名字改成了:“pyqt5ClassSignalDef”,這也只是第一個坑,畢竟最新版的SIP和PyQt5.3.2版本已經差了兩年。

SIP安裝方法:

$ tar -xvf sip-4.17.tar.gz
$ cd sip-4.17
$ python configure.py
$ make
$ sudo make install

此時注意一下我們sip.h安裝的路徑,後面會用到。
這裡寫圖片描述
此時,已經將相關的包安裝進呼叫的庫目錄。具體的安裝方法見README檔案中所說的:在doc資料夾下有相關的安裝教程,在那個installation.html檔案裡有。

二、編譯PyQt5.3.2

解包 PyQt-gpl-5.3.2.tar.gz,等相關操作

$ tar -xvf PyQt-gpl-5.3.2.tar.gz
$ 
cd PyQt-gpl-5.3.2 $ python configure.py

到這裡基本上沒有問題。

於是我們要接下來的 make 操作
此時可能會報錯:

"sip.h" No such file or directory.

看編譯輸出,我們一步步往上找,發現這個時候是先進入了QtCore目錄進行了編譯,然後就報錯了。判斷的原因是MAKEFILE裡的引用檔案目錄不對。而實際的位置是 “/usr/include/python2.7”,把這裡修改了就好了。

這裡寫圖片描述

此時將其餘資料夾內的MAKEFILE中對於python2.7的路徑進行修改就可以了
這裡寫圖片描述

調整完成後,就可以繼續編譯和安裝。

$ 
make -j4 $ make install

三、PyQt5測試

#coding:utf-8

from PyQt5.QtWidgets import *
import sys

class LoginDlg(QDialog):
    def __init__(self, parent=None):
        super(LoginDlg, self).__init__(parent)
        usr = QLabel("使用者:")
        pwd = QLabel("密碼:")
        self.usrLineEdit = QLineEdit()
        self.pwdLineEdit = QLineEdit()
        self.pwdLineEdit.setEchoMode(QLineEdit.Password)

        gridLayout = QGridLayout()
        gridLayout.addWidget(usr, 0, 0, 1, 1)
        gridLayout.addWidget(pwd, 1, 0, 1, 1)
        gridLayout.addWidget(self.usrLineEdit, 0, 1, 1, 3);
        gridLayout.addWidget(self.pwdLineEdit, 1, 1, 1, 3);

        okBtn = QPushButton("確定")
        cancelBtn = QPushButton("取消")
        btnLayout = QHBoxLayout()

        btnLayout.setSpacing(60)
        btnLayout.addWidget(okBtn)
        btnLayout.addWidget(cancelBtn)

        dlgLayout = QVBoxLayout()
        dlgLayout.setContentsMargins(40, 40, 40, 40)
        dlgLayout.addLayout(gridLayout)
        dlgLayout.addStretch(40)
        dlgLayout.addLayout(btnLayout)

        self.setLayout(dlgLayout)
        okBtn.clicked.connect(self.accept)
        cancelBtn.clicked.connect(self.reject)
        self.setWindowTitle("登入")
        self.resize(300, 200)

    def accept(self):
        if self.usrLineEdit.text().strip() == "eric" and self.pwdLineEdit.text() == "eric":
            super(LoginDlg, self).accept()
        else:
            QMessageBox.warning(self,
                    "警告",
                    "使用者名稱或密碼錯誤!",
                    QMessageBox.Yes)
            self.usrLineEdit.setFocus()

app = QApplication(sys.argv)
dlg = LoginDlg()
dlg.show()
dlg.exec_()
app.exit()

執行效果如下:
這裡寫圖片描述