近期有个做简单UI软件的想法,项目分为ubuntu和windows两部分,选择使用Qt,初步用pyqt,后期如果有必要再改成C++的Qt。
按照其他大神分享的教程再ubuntu22的虚拟机上安装pyqt5和eric6,但是最后一步eric6安装之后无法启动,多处排查也未能处理好。最后改为pyside6 + vscode,配置后能够正常编译执行(virtualbox虚拟机,安装完体积17.1G,配置好后单独备份留存)。
现记录安装配置过程,最后附录失败的pyqt5和eric6安装过程。
总览:
一、基本环境准备:Ubuntu22, pip3(Ubuntu自带pythono 3.10)
二、安装pyside6
三、安装vscode
四、安装python3打包程序
五、测试例程
一、基本环境准备
1.1 环境
virtualbox-6.1.26,安装虚拟机ubuntu22.04.1,获得纯净的ubuntu系统。
1.2 安装python3的pip3
sudo apt update
sudo apt install python3-pip
之后可以使用pip3指令安装python3的包
二、安装pyside6
2.1 安装
sudo pip3 install pyside6 -i https://pypi.tuna.tsinghua.edu.cn/simple
-i 后面使用了清华源,默认的太慢了
使用sudo,安装路径就是系统目录,不用sudo会安装再.local内。我用了sudo,安装后有警告提示,后续有问题再重装。
2.2 打开pyside6-designer
终端pyside6-designer,不能直接designer指令。打开后如下图,安装正确。
pyside6-designer
三、安装vscode
3.1 安装vscode
官网下载deb包,安装
3.2 安装3个插件
Python,Python debugger,都是python编程用的
然后是PYQT Integration插件
3.2 配置PYQT Integration插件
需要配置4个,如图:
具体配置信息都是具体文件的全路径,除了最后的Path,其他都有默认的,都是pyqt5的,pyside6都换了名字,具体是:
- pylupdate:pyside6-lupdate
- pyrcc:pyside6-rcc
- pyuic:pyside6-uic
- qtdesigner:pyside6-designer
【使用whereis 指令查找真实路径后填入,使用Ctrl+Shift+C复制终端里的文本】
填入后
- pyside6-rcc // 编译资源文件的,可以改后面的Filepath配置来修改转换后的文件名,我没改
- pyside6-uic // 将UI界面编译成python代码的,改界面后必须编译一次更新的,可以修改后面的Filpath配置修改转换后的文件名,我没改,默认编译后明明为 Ui_<ui文件名>.py
四、安装python3打包程序
清华源,速度飞起,国外源太慢了
sudo pip3 install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
打包后,将源码打包成一个完整的可执行文件,有2中方式:
- pyinstaller xxx.py,生成执行文件,附带一个文件夹
- pyinstaller -F xxx.py, 合成一个,单个文件在其他机器上可运行
pyinstaller只是将代码打包成本平台的执行文件,不会交叉编译成其他平台程序的。有的blog写的ubuntu打包成exe,但这就是一个说法,不是真的打包成windows平台的.exe文件。
五、测试例程
5.1 基本测试
vscode打开文件夹,空白处右键,菜单里出现PYQT(插件通用的)的选项,空白文件夹只有新建,有UI后会有新建、修改和编译。
点击后,打开了Qt designer,创建一个widget,随便填几个控件
保存到ui文件(例如明明ui.ui)以后,右键ui.ui,编译,会生成Ui_ui.py,里面创建了窗口类。
新建一个py文件,例如testwidget.py,python语言语法。pyside6的基本调用结构,与pyqt是一样的。类Ui_Form就是之前绘制的窗口类。
'''
testwidget.py
'''
from Ui_ui import Ui_Form
from PySide6.QtWidgets import QApplication, QWidget
class MyWindow(QWidget, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
if __name__ == '__main__':
app = QApplication([])
win = MyWindow()
win.show()
app.exec()
运行testwidget.py,效果如下,成功运行~~
5.2 试试信号和槽功能
窗口内控件名称都是默认的,修改testwidget.py
'''
testwidget.py
'''
from Ui_ui import Ui_Form
from PySide6.QtWidgets import QApplication, QWidget
class MyWindow(QWidget, Ui_Form):
def __init__(self):
super().__init__()
self.setupUi(self)
self.count = 0
self.bind()
def bind(self):
self.pushButton.clicked.connect(self.setshowtext)
self.pushButton.clicked.connect(self.increasecount)
self.dial.valueChanged.connect(self.setshowvalue)
def setshowtext(self):
self.label.setText('Hello pyside6! ' + str(self.count))
def increasecount(self):
self.count = self.count + 1
def setshowvalue(self):
self.lcdNumber.display(self.dial.value())
if __name__ == '__main__':
app = QApplication([])
win = MyWindow()
win.show()
app.exec()
运行之后,点击按钮,右边label出现文本及点击次数;转动旋钮,右边LCD显示对应数字。
功能完善~~
5.3 测试打包
testwidgete.py所在文件夹内打开终端:
pyinstaller -F testwidget.py
结果再dist文件夹内,双击运行:
完结撒花~~~~~~~~~~~~~~~~~
####################### 失败的pyqt5配置过程 ##############################
安装pip3
- sudo apt install python3-pip
- 查看包能够安装的版本:
- pip3 index versions [packagename]
- pyqt5: 最高5.15.10,有5.15.9,5.15.6
- PyQt5-tools: 5.15.9,不支持5.15.6 【不好用,弃用】
- QScintilla: 最高2.14.1,
- apt-cache madison [packagename]
- python3-pyqt5:5.15.6(only)
- pyqt5-dev-tools: 5.15.6 (only)
- qttools5-dev-tools: 5.15.3 (only)
- gtk2-engines-pixbuf: 2.24.33
- 安装pyqt5【无法启动】
- pip3 install pyqt5==5.15.9
- 清华源速度快 pip3 install pyqt5==5.15.6 -i https://pypi.tuna.tsinghua.edu.cn/simple
- sip 顺带安装了sip,版本PyQt5-sip-12.13.0
- pyQt5-Qt5 也顺带安装了,版本PyQt5-Qt5-5.15.2
- pip3 install QScintilla -i https://pypi.tuna.tsinghua.edu.cn/simple
- 显示版本2.14.1
- pip3 install PyQt5-tools -i https://pypi.tuna.tsinghua.edu.cn/simple
- 安装pyqt5
- pip3 install pyqt5==5.15.6
- 清华源速度快 pip3 install pyqt5==5.15.6 -i https://pypi.tuna.tsinghua.edu.cn/simple
- sip 顺带安装了sip,版本PyQt5-sip-12.13.0
- pyQt5-Qt5 也顺带安装了,版本PyQt5-Qt5-5.15.2
- pip3 install QScintilla -i https://pypi.tuna.tsinghua.edu.cn/simple
- 显示版本2.14.1
- sudo apt-get update
- sudo apt-get install python3-pyqt5
- sudo apt-get install pyqt5-dev-tools
- sudo apt-get install qttools5-dev-tools
- 修改配置,(打开后已经是qt5不用修改
- 文件路径:/usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default/conf
- 内容
- /usr/lib/qt5/bin
- /usr/lib/x86_64-linux-gnu
- 测试pyqt5安装情况
- 创建一个test.py文件,写入代码
import sys
from PyQt5.QtWidgets import QWidget, QApplication
app = QApplication(sys.argv)
widget = QWidget()
widget.resize(640, 480)
widget.setWindowTitle("Hello, PyQt5!")
widget.show()
sys.exit(app.exec())
- 在终端上运行: python3 test.py
- 如果正常,标题是"Hello, PyQt5!"
- 消除wayland报警
- sudo gedit /etc/gdm3/custom.conf
- WaylandEnable=false 删除前面的#,讲wayland禁用
- 重启服务 sudo systemctl restart gdm3。会类似于重启,先保存未保存的文件
- 重新登录
- 安装Eric6【失败】
- 官网已经没有eric6,只有eric7。但eric7是和pyqt6配套使用的
- 从网盘中找到了一个eric6-21.11
- 文件夹中打开终端,python3 install.py
- eric6打开程序[失败]提示 版本5.15.2和5.15.3冲突
- qt-designer能打开,显示qt版本5.15.3
- 重新安装qmake,也没有改变【弃坑】