怎么感觉 PyQT 很少有人用 ,是不是被低估了

2023-06-23 17:51:50 +08:00
 iorilu

因为有开发桌面应用需求, 调研了能跨平台的 Gui 框架

其实基本就两个, 基于 node 的 Electron, 和老牌的 QT 以及相关的 python 实现 PyQT

我最终选了 PyQT , 其实我用的是 Pyside , 但是一个东西, 就是 license 不一样

但我发现这方面很少有人讨论, 按理需求应该很多的

我个人认为 QT 还是正统点, 应该功能也比 Electron 强, 这基本就是想做跨平台 GUI 应用的唯一选择, 按理应该比现在火啊

8049 次点击
所在节点    程序员
50 条回复
muooOOO
2023-06-23 20:03:46 +08:00
跨平台下想要性能用 C++。想要出活快并且 UI 过得去,那就 web 。
pyqt 就很尴尬。。。
psyche08
2023-06-23 21:16:11 +08:00
QT 问题有两个,C++门槛比前端高,授权问题
totoro52
2023-06-23 22:35:16 +08:00
动不动就上几百 M
vincent7245
2023-06-23 22:39:54 +08:00
都用 qt 了,直接 c++写呗,要不然还不如前端一把梭
garywill
2023-06-23 22:46:12 +08:00
楼上好多说直接 c++的,我其实最近 c++和 py 两种 qt 用法都有尝试,感觉 c++稍改一点编译太慢了,宁愿 py
angrylid
2023-06-23 22:49:09 +08:00
PyQt 适合于你本来就有个 Python 工程,然后你需要给它加个 UI 的情况。不管怎么说,比 wxWidgets 或者 tk 强多了吧。

另外 2C 产品用 Qt+CEF 应该远比 PyQt 主流。
bugfan
2023-06-23 23:11:10 +08:00
刚毕业那会用的 TKinter 写 gui,当时写 gui 的好像 pyqt 用的多

现在果断就用 Electron+Golang 了,无论是开发速度,还是编译速度都是好一点,就是最后编译出来的体积大一点,但是无所谓了
0312birdzhang
2023-06-23 23:23:50 +08:00
新的 Qt 使用 qml+js/c++写界面也很简单,主要是学习 qml 需要一些成本
shyling
2023-06-23 23:29:47 +08:00
应该是直接用 qt 的多吧
statumer
2023-06-23 23:34:13 +08:00
PyQt 在 GUI 解决方案这块儿是非常专业的,不是 tk 和其他的一些杂牌框架能比的。
但是 PyQt 和 Electron 相比有这么几个问题:
Qt 的 MVVM 和 js 相比非常落后。Qt 官方有一个 model - delegate - view 的框架,但是写起来复杂且不好用。如果你不用 mvvm 你就自己去计算 ui 的状态转移吧。
Python 本身作为脚本语言性能和 v8 有质的区别。Py 和 electron 都可以加 native 扩展。
Qt 本身对样式和排版的支持远不如 chromium ,你想写个好看的动画和样式还需要自己研究 QGraphics 。当然如果你的审美能接受丑陋界面这倒也无所谓。
关于部署,qt 官方有一个 pyside6-deploy 工具,这东西是对 nuikta 的 wrapper 。但是根据我的踩坑经验这个工具没有任何实用性,这个包装很糟糕也就罢了,nuikta 自身也有各种各样的问题,远不如 PyInstaller 成熟。给我感觉 Qt 官方没有很在乎 PySide 的发展。打包完和 electron 相比体积也没有优势。
flyqie
2023-06-23 23:43:57 +08:00
非 py 项目引 pyqt 没意义。。

打包不方便,体积大,开发也不方便。

qt 自家主用 c++,对 py 这边。。哎。

你见过用大公司用 pyqt 写项目吗,我没见过,但我见过一堆用 electron 写的。。生态是大事。
flyqie
2023-06-23 23:46:37 +08:00
@flyqie #31

哦对了,qt 的生态和功能基本都是优先 c++的,要说起来的话,c++ qt 才算名副其实的正统。。
ysw
2023-06-23 23:59:00 +08:00
我尝试使用过,感觉有点复杂,除非想用 python 的库,不然 electron 的确方便
wangerka
2023-06-24 08:06:24 +08:00
我写过好几个 pyqt 的项目,整体感觉是 60%花在写 UI 上,只能有 40%的时间写逻辑,而且 qss 文档也少,写出的 UI 不好看,很难实现 web 那些炫酷的动画。
写一个功能一样的应用,用 pyqt 需要的时间可能是 web+electron 的好几倍。
opengps
2023-06-24 09:03:32 +08:00
各有各的用途,我现在做工控领域,发现不少老程序都用的 Qt ,写这种程序的人往往不怎么热衷分享,毕竟真用起来都是在企业内网,谈多了都可能涉及到暴露一些企业信息的地方
iorilu
2023-06-24 09:45:47 +08:00
我个人觉得 electron 的 ui 是带 web 的风格, 这不是完全 native

当然这是我的想法 ,我如果开发桌面软件, 想更 native 一些

另外性能也不是完全一样把
HiCode
2023-06-24 11:45:42 +08:00
win form 类型的 gui 框架,在这一场竞争中输给了 html+css+js

不管是 qt ,还是 delphi/lazarus ,还是微软家的 Windows Forms ,原先那种桌面 gui ,都败了。

去看 gui 框架的发展,趋势非常明显了。
NoOneNoBody
2023-06-24 11:50:50 +08:00
我也喜欢 native ,一个自用的东西从 pyqt4 写到 pyqt6 ,BS(browser-server)和 CS(client-server)还是有点区别的
一些细微的点的区别,让最终整体表现相差很大,有点蝴蝶效应的意味(混沌理论?)

先是证书版权问题,这让 qt 商用环境有点复杂,老实说我都没搞清,只是我没商用甚至没公开发行就不理会而已
大公司恐怕要让法务研究一遍证照问题

然后是 client-UI 本身就是难点,它面对的是人,因为事件驱动,但人的行为是无限的,这造成不可预想的用户行为太多,上面有说 UI 工作占了 60%的,我觉得说得少了,UI 应该是可以单独构成项目了
例如一个 tableview 展示 pandas-dataframe ,多列排序(含拼音排序和浮点数排序),这么简单的需求,工作量就很大了
数据表格,web-ui 是用户选好排序的列,提交,后端计算然后跳转页面(或整页刷新);而一个 client-UI 做整个界面刷新是很奇怪的,只能做控件刷新

最后,客服问题
用户对 web 有种自动降低需求的感觉,看到是 web 就没有那么多要求——“能看清就行”。例如一个文件名有特殊字符不能读,web 提交一般不会崩,返回错误,用户的接受度高,会自觉调整适应;但纯 client 先要解决不能崩,然后返回错误,但用户也会不接受
这是某种潜意识引发的,bs 的话,用户默认数据在 server 端计算,提交数据需要适应 server 要求,会把 server 按甲方看待;而 cs 的话,用户则认为软件(UI+后端一体)在本地,软件的表现应该一次处理所有问题,没弄好就是 bug
client-UI ,不可预料的用户行为太多,有些仅仅只是操作顺序问题,用户不遵循这个顺序就会出现问题,并不是 bug ,但用户不这么认为
个人项目基本难以兼任“客服”,导致做纯 client 的项目本身就少,更别说 pyqt 了。pyqt 缺少 py 文档,学习成本其实要同时看懂 C++语法的文档,还要懂 python (废话),比单纯 C++ QT 还要难。还好现在有人在 github 做了纯 py 语法的 pyqt 文档了

总的来说,web-UI 和 client-UI 的区别是,web-UI 是提交“参数”,后端做数据筛选和处理,步骤是单线程的(并发在 server 而不在 UI );而 client-UI 是交互数据,UI 操作时也要计算数据,还要防止界面 freeze ,是一个协程 /多线程工作

现在越来越多 web-UI 就是要把事件驱动简单化,让不可预料的用户行为大幅度压缩,直到这些“不可预料”达到极少数就可以忽略不理会了,舍弃少数“异端”客户,压缩工作量(成本),获取更大利润
iorilu
2023-06-24 14:59:47 +08:00
@wangerka 我不这么看

我不想用 web 就是因为 web 这么多年一直没有稳定下来, 不停的要学新东西换新东西

我只想用最简单的方式做个能用的界面

而且 web 你默认啥也不配比如 css 的, 是没法用的

但 qt 你啥也不弄出来的界面也能用, 而且完全 native 的

再加上 qt 这么多年的历史, 学了一直能用, 也不用一直搞新东西

pyqt 最大问题确实是没啥文档, 方法是直接运行例子, 模仿修改就行
HankLu
2023-06-24 15:32:41 +08:00
其实我用 pyqt5 开发了很多 Windows 软件,不过都是自己用,别人用不上

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/951057

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX