V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
yuyue001
V2EX  ›  程序员

2024 年,桌面软件开发(不考虑移动端),推荐什么技术栈?

  •  
  •   yuyue001 · 336 天前 · 18983 次点击
    这是一个创建于 336 天前的主题,其中的信息可能已经有所发展或是发生改变。

    flutter 似乎不支持多窗口,pass ,

    比如 QT/MAUI/Avalonia/JetPack Compose/,哪个容易上手?

    基于 web 的技术, Electron 项目太大,性能要求可能不行。 tauri 尝试了一下,rust 太难写业务太复杂了。 wails 怎么样?

    113 条回复    2024-01-26 16:33:50 +08:00
    1  2  
    murmur
        1
    murmur  
       336 天前   ❤️ 16
    electron 性能哪里不行了,不就是启动慢点么,浏览器的性能挺好的,尤其是 chrome ,比菜鸟写的桌面程序好多了,ui 多还炫酷
    wuruxu
        2
    wuruxu  
       336 天前   ❤️ 1
    桌面软件开发 还是 QT 比较靠谱
    wireshark , telegram , zoom 都是 QT 写的
    stinkytofu
        3
    stinkytofu  
       336 天前
    javafx
    mainjzb
        4
    mainjzb  
       336 天前   ❤️ 2
    wails 3.0 才有多窗口,目前似乎处于 beta 版本
    tauri 的多窗口似乎不支持 linux
    多窗口是硬需求的话,这些新框架的坑还挺多,不想踩坑的话以上似乎只有 qt 和 Electron 符合你的需求。
    guguji5
        5
    guguji5  
       336 天前   ❤️ 1
    刚拿 electron 试了试手,,感觉很适合前端,
    hez2010
        6
    hez2010  
       336 天前 via Android   ❤️ 5
    Avalonia 对非线性动画支持的很好,还支持 gpu interop ,还是在场唯一一个有 compositing renderer 架构的自绘 UI 框架,可以做到无论 UI 线程是否卡死都能流畅进行的隐式动画。
    配合 FluentAvaloniaUI 可以做出很漂亮的 fluent design 的 app 。
    另外它还支持 nativeaot 编译到机器码直接出二进制,aot 后可以做到双击后瞬间启动。
    rwecho
        7
    rwecho  
       336 天前 via Android
    Blazor
    Maui+blazor 或者 avalonia+ blazor
    rwecho
        8
    rwecho  
       336 天前 via Android   ❤️ 1
    说下原因,首先你提到业务,那基本上如果能用前端框架必然是最好的。又提到 eletron 太大和性能问题,对于 blazor 可以把耗时的逻辑放到 native 里面,页面注重展示。并且打包不大,webview2 另外算。

    但是如果你想支持 xp 那就算了。

    技术栈 c# blazor Javascript tailwindcss
    你可以参考下 https://github.com/rwecho/V2ex.Maui
    iorilu
        9
    iorilu  
       336 天前 via Android   ❤️ 1
    愿意学习的话,还是 pyqt 靠谱,跨平台方便
    ashong
        10
    ashong  
       336 天前 via iPhone
    cef+ts
    huage
        11
    huage  
       336 天前   ❤️ 1
    https://www.v2ex.com/t/986341

    总结一下:
    aardio
    electron
    pyqt
    antonius
        13
    antonius  
       336 天前
    业务复杂的话,前端用 Electron ,C++用 Qt 。c#用 wpf/uwp 。
    业务不复杂的话,c/c++用 nanovg/imgui 都行。
    yKXSkKoR8I1RcxaS
        14
    yKXSkKoR8I1RcxaS  
       336 天前
    QT ,唯一选择
    renmu
        15
    renmu  
       336 天前 via Android
    人 vscode 怎么不卡(狗头
    tyzandhr
        16
    tyzandhr  
       336 天前 via Android
    compose 还是前端的风格,和桌面不是很搭
    jlkm2010
        17
    jlkm2010  
       336 天前
    可以试试同样基于 webview2 的 Neutralinojs
    https://neutralino.windhc.com/
    xieren58
        18
    xieren58  
       336 天前
    Avalonia
    tool2d
        19
    tool2d  
       336 天前
    都 2024 年,有什么不懂问 gpt 就行,前端和客户端技术,已经没有很大隔阂了。

    以前前端写太多,今年我也试试用纯 GPU 写本地客户端程序,也许会挺有意思。

    反正 gpt 是万能老师傅,一般不会翻车。
    dc46555ad
        20
    dc46555ad  
       336 天前
    颜值第一,我推荐 electron
    lyusantu
        21
    lyusantu  
       336 天前
    wpf
    jones2000
        22
    jones2000  
       336 天前
    win32
    yuyue001
        23
    yuyue001  
    OP
       336 天前
    @renmu

    我说 electron 开发臃肿,是因为我本人 Python 开发,前端技术比较菜,我觉得自己搞不定。VSCode 是不卡,可我也没微软那水平啊。
    yuyue001
        24
    yuyue001  
    OP
       336 天前
    @hez2010 试了 Avalonia ,axaml 文件太大,拆分组件时传递参数总是失败。ChatGPT 也解决不了,现在除了 11 版,ChatGPT 好像还没学到。

    一方面感觉 ChatGPT 变笨了,另一方面,ChatGPT 做技术选型讨论的时候,它总是和稀泥,这也好,那也好。
    angrylid
        25
    angrylid  
       336 天前 via Android   ❤️ 1
    这也算月经贴了。
    你要做什么东西,你团队的人都会什么技术你是一概不谈,既然这样的话直接 PyQt 吧
    realJamespond
        26
    realJamespond  
       336 天前
    没人提 flutter?虽然不懂
    xiaoxinshiwo
        27
    xiaoxinshiwo  
       336 天前
    python 就 QT
    alleluya
        28
    alleluya  
       336 天前
    @realJamespond 图啥呢 op 又不考虑移动端 多窗口支持也有问题 单纯桌面客户端技术选择足够纠结了...
    vialon17
        29
    vialon17  
       336 天前
    推一下 qt/pyside 原因:名字好听
    murmur
        30
    murmur  
       336 天前
    @realJamespond flutter 那屎语法太难学了
    Befehishaber
        31
    Befehishaber  
       336 天前
    Avalonia
    Promtheus
        32
    Promtheus  
       336 天前
    有大佬知道 QT 的界面怎么美化吗 我写的界面有点丑啊。
    LXGMAX
        33
    LXGMAX  
       336 天前
    @Promtheus 去找别人的 css style 抄上去
    或者交给美工
    langhuishan
        34
    langhuishan  
       336 天前
    @iorilu 打包发布的时候,就各种打不开。
    broken123
        35
    broken123  
       336 天前   ❤️ 1
    必然是 flutter 开发 1 年半 已经喜欢上了
    yidadaa
        36
    yidadaa  
       336 天前
    别选了,electron 除了打包体积大点,开发体验和生态都是断层领先,根本不存在你说的性能问题。非得注重体积,就用 flutter ,但是 flutter desktop 也没什么正经团队在用,喜欢踩坑可以试试。Qt 和 WPF 就别看了,老登公司才用这些玩意儿,开发体验还停留在上个时代。
    xieren58
        37
    xieren58  
       336 天前
    但凡用过原生开发, 就不想用 electron 这玩意了... electron 启动慢的一逼... 用 Avalonia 做了几个项目了... 从 electron, wpf 转到 Avalonia 的...
    txzh007
        38
    txzh007  
       336 天前
    还是看需求,如果开发一个窗口套壳,将第三方 exe 包裹在自己写的应用里,这个需求 electron 就完全没办法做.
    ayang23
        39
    ayang23  
       336 天前
    qt 或者 pyqt ,最近我把各种方案都测试了一遍。当然 electron 也不错,和 qt 生态位完全是错开的。
    qml 也是套了一个浏览器,虽然性能比 electron 高,但写起来肯定不如 react 之类的爽,编译慢,错误提示垃圾,关键还有学习成本,排除。
    ayang23
        40
    ayang23  
       336 天前
    @Promtheus qtwidget 支持一些简单的 css
    murmur
        41
    murmur  
       336 天前
    @txzh007 ??那你自己的应用开一个 webview 不就可以了么,然后自己提供 native 接口
    atpex
        42
    atpex  
       336 天前
    electron 做出来的东西怎么说呢,有一种黏糊糊的感觉,看着好像很 cool (寨味儿很冲),但总觉得哪里不舒服。
    murmur
        43
    murmur  
       336 天前
    @atpex 这还不是 ui 问题,好看的应用是要自己设计的,qq 音乐这些不还是 webview 套壳,只不过不是直接 electron ,改成 cef 了
    lujiaxing
        44
    lujiaxing  
       336 天前
    Electron 是首选。
    别关心什么内存占用的问题。那不是你该关心的问题。除非涉及到 C++ 交互,否则 Electron 永远是不二之选。界面美观开发简单。没什么比 Electron 更合适的。

    然后其次是 Avalonia 。性能强悍内存占用低,可 AOT 所以也不需要什么 .NET 环境。打包好了到处都能用。尤其涉及到界面复杂或者带动效/3D/图表的情况下,Avalonia 基本上可以说是唯一选择。

    最后是 QT 。老牌 GUI 开发框架了。性能极其强悍,但是绑定 C++。对 C++ 熟悉的可以考虑。
    murmur
        45
    murmur  
       336 天前
    推 flutter 的,挑明了说,完全的 kpi 导向,难用,难写,但是容易出 kpi ,别人不好接

    electron 是最适合的,国内用的也最广,ui 好设计,好学,会做网页就会做程序,各种 ui 库随便用

    如果看重底层就 cef ,都是 h5 套壳,看是壳有多重而已

    再看重底层就 qt ,wps ,davinci 这些都是 qt 做的,再头铁点,比如 affinity photo ,怀疑真的是双端自己写,一堆 c 和 wpf 的库
    hez2010
        46
    hez2010  
       336 天前 via Android   ❤️ 1
    @yuyue001 拆分 axaml 一般做法是分 template 出去放到资源字典里来使用。
    dcsuibian
        47
    dcsuibian  
       336 天前
    如果是我来开发的话,我会优先考虑直接做成 Web 版(毕竟现在 Web 能调用的 API 也很多),如果真的本地调用特别多再考虑用 Electron
    cktsun
        48
    cktsun  
       336 天前 via iPad
    @tool2d 人家是期待討論的過程🥹
    你可能不太了解。這些決策類盡量不要交給 GPT ,還是要個人深入了解,沒深入了解過等同沒參與過開發過程。
    txzh007
        49
    txzh007  
       336 天前
    @murmur 如果我选择嵌套第三方 exe 肯定需要第三方 exe 的运行界面啊. 可能是需求不一样,我这边是将三维云流化,这种操作太多了
    lstz
        50
    lstz  
       336 天前 via Android
    我很是推荐 tauri ,我的开源项目 github.com/work7z/LafTools 就计划用它来作为桌面端的支持。

    我这个项目是 go 写的,但为什么桌面端不用 wails 而是 tauri 呢?原因如下

    1 ,支持桌面呼出,这个貌似 wails.io 目前还做不到
    2 ,软件体积小,这对于开箱即用的工具箱来说尤其重要,如果你想体积 30mb 以内,就用它!
    3 ,rust 逼格高。当然,我不想拉踩,只是我个人的角度来看....
    4 ,web 生态直接用起来!

    其实,很多人希望原生 ui ,无非就是太卡了或者不方便用。但其实还是用户体验跟程序设计的原因,用户只在乎颜值!功能!效率!

    其他内存占用多少之类的,很少会有人真的这么看
    lstz
        51
    lstz  
       336 天前 via Android
    至于 rust 难度的问题,其实有了 gpt4 ,很多困难都会迎刃而解,再不济也有现成的 awesome-tauri 给你用

    关于 electron ,假如我要做面向大众的产品,那是肯定用的,无论是兼容性还是视觉统一性

    然后就我个人而言,我的产品用户都是专业人士,他们应该都会安装最新的浏览器,不太可能会用 ie11 了吧。。。
    yooomu
        52
    yooomu  
       336 天前
    electron 啊,好写,好看,跨平台。除了占内存占硬盘。至于性能,js 性能挺强的,不过我不知道你对性能要求有多高
    murmur
        53
    murmur  
       336 天前
    @txzh007 三围那你可以考虑 unity ,用游戏引擎做 3d 比自己开发简单多了
    ljsh093
        54
    ljsh093  
       336 天前
    @lyusantu #21 文艺复兴是吧
    leyoumake1997
        55
    leyoumake1997  
       336 天前
    大项目的话,后端业务功能较多,推荐 wails 。目前 wails 也支持多窗口(若是你觉得复杂可以窗内多 Dialog )。wails 打包最小体积也只有 10MB 左右(客户端运行只需要安装个 Edge 扩展即可)。另外 wails 是基于 golang 研发出来的,天生并发性能好,组件库都是源生代码。
    duan602728596
        56
    duan602728596  
       336 天前
    Electron 启动慢,可能是初始化的时候启动慢,也可能是启动时同步加载了所有 node 的模块
    rockxsj
        57
    rockxsj  
       336 天前
    avalonia 还能用 C# 美滋滋
    wangtian2020
        58
    wangtian2020  
       336 天前
    electron 🤓
    不是什么好就用什么,而是我会什么就用什么,我只会 electron ,最近在用 electron 狠狠的写上位机跟底层通信,nodejs 直接 JavaScript 一把梭了
    iorilu
        59
    iorilu  
       336 天前
    @langhuishan 是要花点时间, 但肯定可以用 pyinstaller 打包得

    我自己得软件就是用这个得, win 和 mac 都可以
    Nosub
        60
    Nosub  
       336 天前 via iPhone
    不建议 QT 和 WPF ,用 electron 或是 Java 的 swing 都可以,学习 c++的时间成本太高,c#客户端生态太差,flutter 不了解不评价,你就想想现在主流前端和后端用的啥,就可以做出选择了。
    jackOff
        61
    jackOff  
       336 天前
    qt+go
    jianchang512
        62
    jianchang512  
       336 天前 via Android
    pyqt 性能够用,开发方便快速
    kaedeair
        63
    kaedeair  
       336 天前   ❤️ 1
    后排提醒 pyqt 是 gpl 协议
    janus77
        64
    janus77  
       336 天前
    你性能要求很高? QQ 都用 electron 了,不要预设一些有的没的,我个人猜你是非企业级项目,性能要求完全够用了。(我为什么猜你是非企业级项目?因为你压根没提到 WPF ,看来是个人开发,喜欢用新技术的那种)
    不需要跨平台的话,win 直接选 webview2 ,比 electron 包体小
    unbridle
        65
    unbridle  
       336 天前
    目前来看支持 qt 和 electron 的最多,我更熟悉 python 所以倾向于 qt ,但是感觉 qt 的界面要想做的好看,方便程度还是比 electron 差了一些
    Elroooo0Y
        66
    Elroooo0Y  
       336 天前
    pyside6, 上手难度低 ,快速实现功能.
    iorilu
        67
    iorilu  
       336 天前 via Android
    qt 最大问题就是没那么多 web 组件库,样式难看点,但一般工具软件也不用太在意

    很在意外观的建议还是用 web 那套

    当然了,qt 本身也有 webview 组件,可以做到 electron 一样的事
    ty10086
        68
    ty10086  
       335 天前   ❤️ 1
    正好因为项目 GUI 界面全平台兼容需要,翻到历史贴有人对比过各种。
    最后我选择了 H2O WAVE (水波)
    https://wave.h2o.ai/docs/getting-started

    H2O Wave 是一个软件堆栈,用于完全使用 Python 构建美观、低延迟、实时、基于浏览器的应用程序和仪表板,而无需使用 HTML 、Javascript 或 CSS 。

    借楼问问:以后长期用这个 widgets 组件开发 GUI 了,有人愿意做长久支持吗?
    lijy91
        69
    lijy91  
       335 天前   ❤️ 1
    @yidadaa 微信输入法目前就在用 Flutter desktop ,还有 360 的极连快传也在用,我最近搞了个仓库做了个 flutter desktop apps 清单 https://github.com/leanflutter/flutter-apps
    sunmker
        70
    sunmker  
       335 天前   ❤️ 2
    还有人说“c#客户端生态太差”???
    layxy
        71
    layxy  
       335 天前   ❤️ 1
    lazarus,跨平台,前提你得会 Free Pascal
    v2yllhwa
        72
    v2yllhwa  
       335 天前 via Android
    其实 pywebview 也不错,nuitka 打包不到 10M ,不过没有 tauri 和 wails 成熟
    mh
        73
    mh  
       335 天前
    QML FluentUI ,之前看到这个国人开发的库,颜值不错,不知道实际用起来怎么样
    googleaccount
        74
    googleaccount  
       335 天前
    不知道选啥就选 Electron
    atpex
        75
    atpex  
       335 天前
    @murmur 嗯,确实设计做好了,其实都一样。只能说 electron 的产品基数大,所以体感千奇百怪了。
    antfu
        76
    antfu  
       335 天前
    新版 qq 就行 electron 感觉还行
    daokedao
        77
    daokedao  
       335 天前
    新版 qq 用的是 electron 还是 cef ?
    masterclock
        78
    masterclock  
       335 天前
    在用 qt ,qml ,总结就是别用 qml ,别用 qml ,别用 qml ,谨慎选择 qt
    ShadowPower
        79
    ShadowPower  
       335 天前
    @sunmker 也许是和 Web 生态比……
    Narcissu5
        80
    Narcissu5  
       335 天前
    @tool2d gpt 的知识库到 2024 了么?
    hongyi2020
        81
    hongyi2020  
       335 天前
    想做一个图像处理相关的软件,推荐用什么开发?
    iDeveloper666
        82
    iDeveloper666  
       335 天前
    桌面端个人不太推荐使用 Compose Multiplatform 。

    相比移动开发来说,只有可以继续用 kotlin 这一个优势,官方目前似乎没有提供一个比较完整的开发方案,路由/状态管理/基础的配置读写等等这些都依赖自己或第三方实现。

    目前用来写了一个小工具,功能可以实现,但过程感觉很费劲。
    HaroldFinchNYC
        83
    HaroldFinchNYC  
       335 天前
    真实一场持久战
    HaroldFinchNYC
        84
    HaroldFinchNYC  
       335 天前
    我准备先试试 electron 和 wails

    先做几个 app 玩具试试

    然后再考虑下一步

    electron 确实,除了体积大,启动不快,对于一个前端程序员,没有更合适的了
    Nosub
        85
    Nosub  
       335 天前 via iPhone
    @sunmker c#客户端生态的确差,你看过有几个互联网公司基于 c#开发客户端的例子,微软自己除外,做些简单的应用还好,你要要调用一些知名的第三方库,非常难受,比如 ffmpeg ,OpenCV ,sdl ,webrtc 这些。
    xujinkai
        86
    xujinkai  
       335 天前 via Android
    WPF 套一个 Webview2 我目前是这么做的
    BYDH
        87
    BYDH  
       335 天前
    比起现代化的桌面应用,我更倾向于在个人项目中写 Terminal GUI ,主打一个反差强烈
    zsan3653nj
        88
    zsan3653nj  
       335 天前
    wxpython
    westoy
        89
    westoy  
       335 天前
    #23 @yuyue001

    作为 python 圈 GUI 的大佬,bt 作者开 chia 这个坑的时候一言不合直接用了 electron......
    yuhuai
        90
    yuhuai  
       335 天前
    @Nosub 互联网企业要求不高的开发客户端短平快,但不代表没有,而且你说的所谓的知名第三方,nuget 上都有,就算没有,c#调用 c++ dll 混编也比 electron 这些简单,不要对你不了解的领域随意贴标签
    fox0001
        91
    fox0001  
       335 天前 via Android   ❤️ 1
    @realJamespond #26 推荐 Flutter
    yangzzzzzz
        92
    yangzzzzzz  
       335 天前
    win 端还是 winui3 好用
    ybz
        93
    ybz  
       335 天前   ❤️ 1
    再等等,Flutter 马上就要出多窗口了
    yidadaa
        94
    yidadaa  
       335 天前
    @lijy91 微信输入法安装包都 132MB 了,很难不让人怀疑里面有没有塞个浏览器内核。
    okhao8801
        95
    okhao8801  
       335 天前   ❤️ 1
    @murmur 还好吧,我写了好多年 Android 原生了,写了 flutter 之后发现太方便了,现在不太愿意写原生了,嫌太啰嗦,很多认识的人也是这个感觉
    Nosub
        96
    Nosub  
       335 天前 via iPhone
    @yuhuai 或是你举几个例子,国内互联网公司有用 c#做桌面客户端,开发比较成功的案例,不要把别人不用,一律说成别人不懂,别人追求短平快,都是别人的原因。
    roundgis
        97
    roundgis  
       335 天前 via Android
    @ybz 預計什麼時候?
    murmur
        98
    murmur  
       335 天前
    @okhao8801 跟 h5 和 rn 比语法就一坨 shit ,真的,组件一堆属性我忍了,布局也要专门的组件套
    okhao8801
        99
    okhao8801  
       335 天前
    @murmur 哈哈哈,是有点,不过有了扩展函数后,用 style 这个库就很方便了,就跟链式调用一样,可以少写很多嵌套
    wang5635099
        100
    wang5635099  
       335 天前
    @stinkytofu 哈哈哈哈
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1749 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:37 · PVG 00:37 · LAX 08:37 · JFK 11:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.