树莓派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()

运行效果如下:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/VVBBBBB/article/details/71791178
今日推荐