3. Debian搭建PyQt5环境¶
平台:野火imx6ull开发板
系统:Debian
Python版本:Python3.7
PyQt版本:PyQt5
PyQt是Qt应用框架与Python的结合,同时支持Python2.x和Python3.x版本,本教程使用的是Python3.7版本,PyQt5版本。
PyQt5是由一系列Python模块组成,超过620个类,6000函数和方法。能在诸如Unix、Windows和Mac OS等主流操作系统上运行,而且由于Python语言的开发方便性,在编写代码时比C++更为方便,美中不足的是Python语言的执行效率会比C++慢。
首先烧录好Debian镜像,为了确保我们的版本是最新版本,让我们使用apt命令更新本地apt包索引和升级系统:
sudo apt-get update && sudo apt-get -y upgrade
手动安装Python3,强烈建议参考上一章的Python环境搭建:
sudo apt-get -y install python3-pip python3
然后安装PyQt5:
sudo apt-get -y install python3-pyqt5
最后安装一些依赖的deb包,它主要是用于提供tslib触摸、中文字库等功能:
sudo apt-get -y install libts-bin
sudo apt-get -y install devscan
sudo apt-get -y install ebf-tslibplugin
sudo apt-get -y install ebf-fonts
然后运行:
sudo depmod -a
最后重启开发板:
sudo reboot
这样子环境就搭建完成。
接下来我们测试一下PyQt5在开发板上的运行:
首先编写一个名字为pyqt5_demo.py的PyQt5应用程序,它主要是用于测试显示、触摸、信号、槽函数、以及PyQt5的部分组件如:QWidget、QLCDNumber、QSlider、QVBoxLayout等的简单使用,虽然是很简单的程序,但足以满足我们的测试,这样子就能说明野火开发板的Debian系统是可以运行PyQt5的,并且可以通过它看出PyQt5的执行效率,目前我的测试还是可以非常快响应的。
pyqt5_demo.py代码如下:
import sys
from PyQt5.QtWidgets import QWidget,QLCDNumber,QSlider,QVBoxLayout,QApplication
from PyQt5.QtCore import Qt
class WinForm(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
#1 先创建滑块和 LCD 部件
lcd = QLCDNumber(self)
slider = QSlider(Qt.Horizontal, self)
slider.setMaximum(1000)
lcd.display(666)
slider.setValue(666)
#2 通过QVboxLayout来设置布局
vBox = QVBoxLayout()
vBox.addWidget(lcd)
vBox.addWidget(slider)
self.setLayout(vBox)
#3 valueChanged()是Qslider的一个信号函数,只要slider的值发生改变,它就会发射一个信号,然后通过connect连接信号的接收部件,也就是lcd。
slider.valueChanged.connect(lcd.display)
slider.setMinimumWidth(200)
slider.setFixedHeight(60)
style = "QSlider::groove:horizontal {border:1px solid #999999;height:10px;" \
"background-color:#666666;margin:2px 0;}" \
"QSlider::handle:horizontal {background-color:#ff0000;border:1px solid #797979;" \
"width:50px;margin:-20px;border-radius:25px;}" \
slider.setStyleSheet(style);
#self.setGeometry(0,0,800,480)
self.setWindowTitle("拖动滑块LCD显示")
if __name__ == '__main__':
app = QApplication(sys.argv)
form = WinForm()
form.resize(800, 480)
form.show()
sys.exit(app.exec_())
然后创建一个run.sh脚本,通过它来运行我们的pyqt5_demo.py,为什么需要一个脚本呢,是因为我们需要导出相关的环境变量,比如显示、触摸等环境变量,这个脚本需要使用sudo权限运行。
run.sh脚本内容如下:
#! /bin/sh
type devscan
if [ $? -eq 0 ]; then
eventx=$(devscan "goodix-ts")
echo "eventx=$eventx"
if [ "$eventx " != " " ]; then
if [ ! -f "/etc/pointercal" ]; then
type ts_calibrate
if [ $? -eq 0 ]; then
ts_calibrate
fi
fi
else
echo "eventx is null"
fi
else
echo "please install devscan"
echo
echo "sudo apt-get install devscan"
exit
fi
export TSLIB_TSDEVICE=/dev/input/$eventx
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_CALIBFILE=/etc/pointercal
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/$eventx
export QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS=/dev/input/$eventx
echo "start pyqt pyqt5_demo..."
python3 pyqt5_demo.py
赋予脚本可执行权限:
chmod +x run.sh
运行:
sudo ./run.sh
效果: