钿稳铆
2025-5-30 13:15:38
前言
最近有帮我朋友处理一个Python Qt5的程序,整体这个程序他们用户AI做了70%了,但是他们需要串联业务(把功能菜单通过tab切换、子窗口、stateWidget切换,业务调试等)就找到了我。好盆友嘛,吃了一个饭,发了我点零花钱,我就来帮忙了。那基本前期在windows下改代码、测试、打包都没问题了,最后,我朋友的朋友他们的工控设备使用centos7 桌面版,需要我把程序在这上面正常的跑起来。我听了:得加油。 然后,那边,准备好了虚拟机环境,这边我也开始。
过程
整个搭建qt环境的过程还是挺顺利的,我也是通过多个ai很快搞定
qt5 必要依赖
#启用 EPEL 仓库 sudo yum install -y epel-release # Qt5 核心库及开发文件 sudo yum install -y qt5-qtbase-devel # 其他 sudo yum install -y \ openssl-devel \ libX11-devel \ libXext-devel \ libXrender-devel \ libXcomposite-devel \ libXcursor-devel \ libXi-devel \ mesa-libGL-devel 复制代码 朋友们,你们就根据这个来吧,有问题问ai,缺啥补啥
第一个坑-openssl 版本问题
之前在win py version 是 3.10以上。寻思用pyenv 搞个一样的,结果, 你妹子的,它们那个centos openssl 版本 1.1以下,死活升不上去,然后py 3.10以上又必须要openssl 1.1以上。
最后,我拖鞋,py 换成3.9,解决问题
第二个坑-运行入口文件无法启动程序
我以为环境是最坑的,没想到啊,启动这个报错才最tm 恶心了。报错内容:
gdk message python:fatal io error 2(no such or diretory on x server:0)
国内外的AI专家问完了,你猜怎么着,结果,AI没给我解决到问题。这 尼玛的,怎么办呢,好在AI还是给我了思路,让我写个hello world 看看,排除扩展问题。
接着我成功运行了hello world,然后顺着思路,我单独启动了一些视图文件,也可以。这下,我就感觉肯定是哪个代码有问题了,我开始断点测试,测了老半天,异常捕获始终没效果,尽管入口文件也有处理器,还是没有被日志记录到。那说明问题不在python,在qt。 # 设置全局异常处理器 sys.excepthook = global_exception_handler 复制代码 当我把问题定位到qt里面,我才想到了,我最开始在网上搜到了一个在ubuntu 下 qt项目也报了和我这个类似的问题。峰回路转,我立马去仔细看他那个问题,根据它的描述,大致问题就是: setWindowIcon 这个在ubuntu下面使用就不行,那个技术朋友文章就屏蔽了这行代码解决问题。那我根据它的思路,也把python的这行代码注释后运行,奇迹发生,我的窗口活生生的出现在我眼前,好,问题解决。 # 设置应用图标 # 需要判断当前是否是mac和windows才能设置 if sys.platform == "darwin" or sys.platform == "win32": icon_path = resource_path("images/logo.png") if os.path.exists(icon_path): self.setWindowIcon(QIcon(icon_path)) logging.debug(f"加载应用图标: {icon_path}") else: logging.warning(f"图标文件不存在: {icon_path}") else: self.setWindowIconText("IASTest") 复制代码 第三个坑-PyInstaller版本老
建议最好升级下
第四个坑-磁盘容量不够,导致打包不完整
这个我当时没截图,就大概说下吧,它们虚拟机主分区磁盘空间严重不足,我打了n次都不行,后面看到了桌面有提示,这下我才感觉到问题,于是,我又去清理空间,最后打包成功并且程序正常使用。我把打包指令放出来# 查找 Qt5 插件路径(通常在虚拟环境或系统 Python 中) python -c "from PyQt5 import QtCore; print(QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.PluginsPath))" # 假设输出为 `/home/li/.pyenv/versions/3.9.22/lib/python3.9/site-packages/PyQt5/Qt5/plugins`,修改命令: python -m PyInstaller --name="IASTest" \ --icon=resources/images/logo.png \ --add-data="resources:resources" \ --add-data="config:config" \ --add-data="db:db" \ --add-binary="/home/li/.pyenv/versions/3.9.22/lib/python3.9/site-packages/PyQt5/Qt5/plugins/*:qt5_plugins" \ --hidden-import=PyQt5.sip \ --hidden-import=sqlalchemy.sql.default_comparator \ --windowed \ --clean \ --noconfirm \ app.py 复制代码 定义桌面应用程序快捷方式
在Linux系统中,.desktop文件是一种用于定义桌面应用程序快捷方式的特殊文件。对于CentOS用户来说,通过创建.desktop文件,可以轻松生成个性化的桌面启动器,从而方便地访问常用的应用程序。本文将详细介绍如何在CentOS系统中创建和使用.desktop文件。
了解 .desktop 文件
.desktop文件通常具有以下结构:[Desktop Entry] Name=应用程序名称 Comment=应用程序描述 Exec=应用程序执行命令 Icon=应用程序图标路径 Type=Application Categories=应用程序类别 复制代码
Name:应用程序的名称。
Comment:应用程序的描述。
Exec:执行应用程序的命令。
Icon:应用程序的图标路径。
Type:应用程序的类型,通常为Application。
Categories:应用程序的类别,用于桌面环境中的搜索和分类。
创建 .desktop 文件
这里我把python qt5 的项目编写到文件,其中Exec设置成我们打包后dist\项目下的可执行程序就行:[Desktop Entry] Name=IASTest Comment=My PyInstaller Application Exec=/home/li/iasTest/dist/IASTest/IASTest Icon=/home/li/iasTest/dist/IASTest/logo.png Terminal=false Type=Application Categories=Utility;Application; StartupNotify=true 以下是各个字段的意义: 复制代码 将 .desktop 文件放置在正确的位置
将创建的.desktop文件放置在以下目录之一:
/usr/share/applications/:适用于所有用户。
~/.local/share/applications/:仅适用于当前用户。
更新
sudo update-desktop-database ~/.local/share/applications sudo update-desktop-database /usr/share/applications 复制代码 效果
第五个坑-找不到串口
你妹子的,眼看都搞定了。测试发现找不到串口,哎。通过ai,我们只需要关机在vm里面添加串口设备(如果不行,还需要执行指令的,自行ai了),看我下面的图就行
总结
坑太多,我只想说:感觉这些计算机巨老们,创造了 deepseek 、豆包、千问、claude、gpt
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
相关推荐