Windows 下开发小应用 GUI,真的很难选方案

2024-01-04 17:52:37 +08:00
 feirisu
今天想做一个简单的小 exe ,需要调用不少原生 Windows API ,想要尺寸小一些,不要有依赖,最好单文件。
其次,UI 不想要 Win32 原生控件。

没想到在 2024 年的今天,这个看似简单的问题是如此难找到一个完美符合要求的。

1.c++ win32 原生,CreateWindow 后面要设 Font 、所有事件自己从处理循环里接。
2.c++ MFC ,想要 UI 好看,Pass 。
3.c#的 WPF ,是很方便,也有很多 UI 库,但是目前不能 AOT (正式版本),独立打包直接去到 100+M ,Pass 。
4.c#的 Form ,UI 不好看,打包也很大,可以 AOT 但是基本是空程序才行,稍微复杂点因为 AOT 隐式启用裁剪,复杂点的代码就会启动不了。
5.c#的 Avalonia ,UI 还行,和 Form 一样 AOT 后有可能启动不了,独立打包 60-80M 也有点大,独立的也还另外带 3 个 DLL ,最难受的是启动很慢,需要 2-3 秒左右的时间才出窗口。
6.QT ,不熟 Pass 。
7.MAUI(WINUI),都不想提。
8.electron ,一堆文件,太重了。
9.flutter ,需要很多原生代码,还是得自己写 c++,两头折腾,尺寸倒是比 c#的那几个小不少。
10.易语言,会,但真的不想用。

微软真的是不干人事,老老实实把 WPF 的 AOT 做好,不知道能造福多少客户端开发。

想来想去,不如控制台得了,除了没 GUI ,尺寸小、单文件、无依赖都可以做到。
24940 次点击
所在节点    程序员
123 条回复
maybedk
2024-01-04 19:05:15 +08:00
qt 不方便的话可以试试 pyqt,用 pyinstaller 打包完可以不超过 50M,或者用 python 内置的 tkinter 会更小
adoal
2024-01-04 19:07:01 +08:00
因为早在很多年前厂家们就没动力卷桌面 GUI 赛道了,更不要说 native GUI
pengtdyd
2024-01-04 19:28:36 +08:00
何为重?何为轻?不要陷入到技术选型的漩涡当中,把业务做好才是正途。
W3Cbox
2024-01-04 19:33:10 +08:00
AARDIO
W3Cbox
2024-01-04 19:40:35 +08:00
@feirisu 唯一能满足你的只有 aardio ,
优点如下:
1.简单易学,有 Python 、php 、或者 JavaScript 之类的脚本语言经验的人,稍微看一下文档。初学者很容易就能学会
2.支持 ui 自绘,可使用 html+css 定制非常美观的界面
3.打包极小,一般的桌面小软件 3-5m 。且启动快
4.示例代码丰富,文档完善,大部分模块代码已经封装好了,直接复制就能用,几行代码随随便便就能拼装出功能强大的软件
Gosolin
2024-01-04 19:44:19 +08:00
不追求新特性可以把 WPF/WinForm 的 TargetFramework 改成 .NET Framework 比如 net461 ,用系统自带的运行时也约等于无依赖了
henix
2024-01-04 19:51:31 +08:00
传统 GUI 库除了 QT 还有很多啊,GTK+、wxWidgets 之类的,还有 https://www.fltk.org/
如果不限语言的话,还有 https://www.tecgraf.puc-rio.br/iup/ 和 Tcl/Tk
yulon
2024-01-04 19:52:14 +08:00
需要纠结这种问题就无脑选 Electron ,因为你不可能比 Electron 做得好,如果你能比 Electron 做得好,那也就不会问这个问题了。
rb6221
2024-01-04 19:53:10 +08:00
你这个要求也挺多了吧。。。要美观,要大小,要便携性,要性能,要开发速度,说说吧是什么你可以放弃的?
什么?你都不想放弃?那还说你要求不高?
ibinary
2024-01-04 19:54:49 +08:00
duilib 或者 cefview.
cookgo
2024-01-04 19:55:41 +08:00
wails
keepwalk2020
2024-01-04 19:56:19 +08:00
python + tkinter + win32API 然后用 pyinstaller 打包, 需要加密的话用+ cython
python + tkinter 写的应用优化打包后可以小于 10Mb
python + ctypes 调用 win32 DLL ,打包后小于 3Mb
不要用用 python + qt
这有一个用 python + ctypes 写的多窗口文件管理器,仅供参考:
https://www.v2ex.com/t/911130#reply9
huyangq
2024-01-04 20:00:45 +08:00
javafx 嘻嘻
Peek
2024-01-04 20:01:23 +08:00
webview2 吧,好像只要运行时就行了,不一定非要 edge 吧?我业余写着玩感觉这个是目前最好的选择了,会易的话,火山 pc 就有这个库
keepwalk2020
2024-01-04 20:20:05 +08:00
如果选 python + tkinter 的话,有图形化 UI 生成工具,
https://visualtk.com/
https://github.com/alejandroautalan/pygubu-designer
设计好 UI ,直接生成相关代码

如果只在 win 平台用,打包时候+upx 压缩,体积更小 : https://github.com/upx/upx/releases/tag/v4.2.2
如果没有调用很大很复杂的库,python + tkinter + win32 API + pyinstaller + upx 写的 GUI 应用可以 < 10Mb, 手动优化( trim 库)可以 < 5Mb

同样的代码,所使用的 python 版本不同会导致不同的打包大小
py2.7 < py3.5 < py3.12
minami
2024-01-04 20:33:29 +08:00
你这个要求有点过多了,但确实有一个满足你所有要求的,就是 https://github.com/yue/yue/blob/master/docs/guides/faq.md 可以静态链接,可以调用原生 Windows API ,完全自绘。如果你能接受原生控件的话,IUP 也是个好选择
0o0O0o0O0o
2024-01-04 20:36:14 +08:00
@minami #56

> It means moon in Chinese

该死的网络文化,我第一眼想到这项目名字有点像吐了
huiyadanli
2024-01-04 20:37:04 +08:00
.net framework 为什么要独立打包,系统不都自带吗
tool2d
2024-01-04 20:49:40 +08:00
@janus77 github 上 windows GUI 轮子巨多,随便找一些来用用,效果都还行。

不过好界面,最后还是要靠美术。
jiangzm
2024-01-04 20:58:02 +08:00
前端不熟还挑啥这个 UI 不好那个 UI 不好看,不管是 Web 前端还是桌面前端都是要开发自己有排版设计能力。

懒鬼就直接找人家现成有 UI 的项目改改好了。

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

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

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

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

© 2021 V2EX