这个问题好奇和困扰已久,实在忍不住我要问出来——如果开发一个 GUI 程序,专业的程序员到底是如何开发和维护 GUI 界面呢?
对我这种"三脚猫"要写工具类软件,多会选用 C#/Delphi/VB/aardio 甚至易语言,总之必须要有一个 IDE 来拖放控件画出界面,也方便修改控件布局 /属性等等,然后集中精力来写(抄改)核心功能代码,事半功倍
但在学习 Golang/python/C/C++等发现几乎没有什么现存的成熟的很方便的 IDE 来组织界面
拿 Golang 来说,尝试去 B/Y 站搜一圈都是类似"fyne/walk/gio/govcl"等,打开库官网查看文档,全部都是只给一段示例代码告诉你这样运行就出现一个自绘的"Hello world"窗口?但对于如何快速地画出想要的界面、布局等等只字不提
搜索视频教程吧,看了十几集无非就是直接拿几百行代码告诉你这几行是画个 600x800 的窗口、那几行是在哪个坐标绘制一个 listview 控件、那几行是添加 Edit 和 Button 、这几行是添加控件响应事件?????
——看的一脸懵逼甚至有些牙疼,你到底是如何画出这个界面的?
都 21 世纪了真的有人写 GUI 程序是要靠脑海中想象出来一张界面草图,然后在记事本 /IDE 中用代码一行行把界面"绘制"出来的吗????
说明:
我知道 govcl 可以自己套用 Lazarus 绘制界面,也知道 python 也有什么 pyqt/Tkinter 等,但集成度低感觉都不直观不方便,并且由于都是非官方维护,大多文档不全资料不足并随时弃坑
最关键的是 感觉也太不优雅了
现在很多都用 Electron ,这个怎么说呢,编个计算器都几十兆我实在难以接受...
1
YRInc 2022-11-15 19:33:01 +08:00 via iPhone
同问,同好奇。现行方案似乎是只有 C#配合 VS 来拖拽控件
|
2
dw2693734d 2022-11-15 19:40:53 +08:00
要不 Electron ,要不 qt
|
3
Frankcox 2022-11-15 19:41:14 +08:00
C++的话有 QT ,至于其他的,python 写 GUI 的还有不少,Golang 我是真没见过几个知名 GUI ,可能是我孤陋寡闻吧
|
4
Building 2022-11-15 19:42:28 +08:00 15
是什么让你这个专业程序员以为 GUI 就应该很简单?
|
5
helone 2022-11-15 19:44:05 +08:00 1
golang 有 wails 和 Electron 差不多意思,不过各端调用系统的 webview ,可以试试
|
6
kurarin 2022-11-15 19:44:50 +08:00 1
如果很在意‘到底是如何画出这个界面的’其实都不用在意,现在所谓画 UI 大部分的方案都是声明式 UI ,连前端都不用知道渲染引擎是怎么工作的。对于 OP 建议是看下 swiftUI 或者 tauri 的方案,可以让你更少关心 GUI 是怎么出来的
|
8
faketemp OP @helone webview 好像 win10 以上系统才有内置 写的程序 win7 默认无法运行 xp 更不用说了
|
9
adoal 2022-11-15 19:58:50 +08:00 3
专业的 GUI 开发,在程序员做实现之前至少要需求工程师(现在流行叫产品经理)做原型设计,美工出图、标注、切图。
所以有没有 RAD IDE 其实关系不是很大。有则好,比如用 WPF 开发可以先根据原型在 VS 里拖拉,再把 XAML 扔到 Expression 里套设计。没有的话也不是大问题。并不需要一万倍生产力的程序员脑海里 YY 界面再手写裸码。 拖拽对于快速开发一些不讲究界面的工具或者业务系统来说确实可以在特定环节上有效提高生产力。但要求高的界面靠程序员反复拖拽着尝试怎么排布更好看是搞不出来的。 |
10
faketemp OP @kurarin 大佬 我不是好奇 gui 后面的运行原理 我是好奇文档或教程里几百行绘制 GUI 界面的代码 是用什么 ide 拖放控件画出来的 还是真的要自己靠想象一行行写代码绘出来
|
11
lukaz 2022-11-15 19:59:59 +08:00 via iPhone
大多数 GUI 程序应该都是基于某个图形框架用代码堆出来的,使用现成的布局和组件,熟练的话写起来也不慢。用 Electron 不也得手写 HTML 吗?
|
12
hujun528 2022-11-15 20:02:57 +08:00
MFC
|
13
helone 2022-11-15 20:03:26 +08:00 1
@faketemp win 下基本就是 webview2 ,只有 win11 高版本用户才有,可以内嵌或者提示用户下载,如果要求 win7 下跑的话估计只能调 IE ,官方有文档,xp 无解,如果你只有 win 的需求可以试试 aardio ,这玩意主流语言都能调用,而且范例教程也多,缺点就是只能 win ,然后作者有点。。。
|
14
adoal 2022-11-15 20:07:40 +08:00
顺便,在 Visual Studio 里用 C/C++开发 Win32 GUI 程序时,当然也是有界面编辑器的。早期还没有 VS 的时候,有 VB 、VC ,你猜 VC 是啥?
|
15
Abbeyok 2022-11-15 20:07:56 +08:00
除了商业软件以外,其他工具类软件实际上不会很在意界面,更多的是功能
|
16
JerryY 2022-11-15 20:08:54 +08:00
Flutter 不是现在也能写了吗?
|
17
ila 2022-11-15 20:11:08 +08:00 via Android
golang 自由度太大了,很多都要自己看 godoc.
fyne 能用,需要时间摸索,如果之前没有写 gui 的经验,那是一脸懵 |
18
cmdOptionKana 2022-11-15 20:13:57 +08:00
其实很好理解, 关键在于: 没什么是加一层抽象不能解决的, 如果不行, 就再加一层.
基本思想就是弄个框架, 组件化, 里面有一些叫做 container 或 layout 的组件来帮助布局, 在布局里面堆组件. 传统布局多数可以做固定布局, 那时搞一些拖拽工具是合理的, 但现代化布局提倡自适应, 根据窗口大小变化. 绝大多数软件的布局都不会太复杂, 不管用什么方法, 都很好搞. 而有些特别复杂的, 不管用什么方法都很不好搞. |
19
keenoappend 2022-11-15 20:23:13 +08:00 via Android
好奇+1 用 idea 是听别人说使用 java 实现的,但是那些图形库都没见过,很迷
|
20
em70 2022-11-15 20:25:39 +08:00 1
每个语言都有自己擅长的领域,GUI 这个领域最强的就是 delphi,开发最简单,体积最小,对用户要求最低,开箱即用
|
21
thedrwu 2022-11-15 20:35:16 +08:00 via Android
@adoal 还有魔改精简版的 vc ,就剩 rc 和 res 编辑器,一张软盘就能装下,不论什么语言都能调用原生的资源 api 。
微软原本只想走纯图形操作的路线,走不通又回来拥抱 powershell ,python ,wsl |
22
tool2d 2022-11-15 21:17:37 +08:00 via Android
最初 win32 那套 ui 消息系统设计很好,后来面向对象流行,硬是给封装成了 MFC ,从此开起了 no zuo no die 之路。
最终代码实在太复杂,官方自己都放弃维护了。 所以我一直觉得,相对简单的代码设计,生命力才够持久。 |
23
subframe75361 2022-11-15 21:26:20 +08:00
低代码+pwa ?样式布局不用写代码,只需要写逻辑,pwa edge 自带直接安装成应用
|
24
jjx 2022-11-15 21:28:55 +08:00
就是桌面程序
高级阶段都是用 layout 布局的 |
25
nightwitch 2022-11-15 21:53:13 +08:00 1
重量级一点的 GUI 框架一般都支持 界面和代码分离,UI 是声明式的。你看到的界面和样式通常由文本语言描述,GUI 框架反序列化得到整个 UI 的结构和样式。程序员只用和 UI 约定好不同控件的名字,以及实现不同控件之间的交互和背后的功能。UI 长什么样对于程序是无感知的。
当然简单点的 GUI 程序都是在代码里直接添加控件耦合在一起,其实没那么难,大多数 UI 相关的代码重复度都很高,复制粘贴改改控件的名字以及样式,以及一些响应事件就完事。 |
26
cxh116 2022-11-15 22:19:19 +08:00 via Android
看本 android 原生程序开发的书再写个简单的 app 差不多就能理解了
|
27
ljsh093 2022-11-15 22:33:54 +08:00
网页也不存在拖拖拖点点点就出的 GUI 吧?要不试试 unity2d ?
|
28
paramagnetic 2022-11-15 22:36:10 +08:00
Labview 了解一下(逃
|
29
L4Linux 2022-11-15 22:38:32 +08:00 1
不止 GUI ,大多数项目的文档极度匮乏,写的时候一半靠猜,一半靠运行的时候行为不合预期才知道该怎么写。
|
30
inframe 2022-11-16 00:10:04 +08:00
通用的 Native GUI 程序已经没落😪,总感觉是快淘汰的技术
小项目 WinForm 拖拖算了,想搞清楚原理的话,《 windows 核心编程》 C++版对非自绘的 UI 编程实现描述很详细。 |
31
uvwlab 2022-11-16 00:20:09 +08:00 via Android
QT 纯代码开发
|
32
ziyic 2022-11-16 00:22:07 +08:00 via iPhone
大概被 html 折磨过的应该都会觉得常见 UI 框架很好想象吧……(原型图应该会有专门的设计部门负责)
现在很多都是声明式了……就是很简单的从左往右从上到下的排列,具体尺寸也可以定义……用习惯了会觉得拖拖拽拽才麻烦😂 |
33
wzzzx 2022-11-16 01:30:48 +08:00
试试 QML ,大概就是知道要一个怎样的组件,然后调整它的各种样式,反复试
|
34
wasd6267016 2022-11-16 01:45:54 +08:00
pyqt + pyqtdesigner 算是比较简单的了
能拖动摆好界面 基于 python 当然更复杂的也不好实现 没办法 |
35
t6attack 2022-11-16 02:18:30 +08:00
运行效率最高的 原生桌面 GUI 开发,这方面核心技术掌握在越来越少的人手里。
所以别挣扎了。辛辛苦苦从公开渠道搜集一些资料,最后学到的是人家 20 多年前的技术。 掉队的人只能玩玩层层封装的现代框架,就是你说的这些。 |
36
dcsuibian 2022-11-16 02:54:27 +08:00 3
按我的理解,lz 之前写 GUI 时都是用 winform 这种所见即所得( WYSIWYG )的编辑器,所以现在看到用编码的方式写界面感到特别诧异。
但现在真的就是用编码方式写界面的。大多数是用某 ml ( html 、qml 、xaml )等标记语言写,确实不直观。 为什么?我不知道,也没搜到满意的答案。我觉得可能是因为用这种方式写,程序员掌控力更强。 至于具体的过程: 如果是大公司,有美工的话,那么可以用设计软件( Figma )之类的画个设计图出来,前端程序员负责实现。 如果是全干程序员,那么就是靠想象草图的,不过是边看边改的,不是先把所有控件的位置大小信息都写好后再预览的。 |
37
dcsuibian 2022-11-16 02:58:14 +08:00 1
就比如我现在想做当前这个帖的页面。
可以看到主要内容是居中的,那我就会先创建一个控件容器,把它居中,设个 1000px ,在网页上看看效果。如果大了或小了就重新调整样式。 然后再继续做里面的空间,调样式。比如左边是帖子的内容,右边是个人信息和广告。边看边改。 |
38
advicebullet 2022-11-16 03:12:15 +08:00 via iPhone
拖控件只是在生成界面的代码,没有设计工具的情况下就只能手写。
哪怕只有一点点 HTML 基础也能理解吧。 |
39
g00001 2022-11-16 06:59:53 +08:00
@helone 话别说一半,aardio 作者有点什么呢 ? 作为个人作者用 17 年的时间开发 aardio ,十几年始终坚持干净免费。用户反馈的问题以极快的速度响应,十几年保持活跃更新。在头条这些平台上可以看到作者几乎是有问必答,范例教程也是不停地发表,你自己也说了范例教程很多。aardio 也将可视化开发环境分享给其他编程语言,与所有编程语言交朋友,远离语言之争,你自己也说了,aardio 支持很多主流语言。还需要有点什么?!
|
40
god7d 2022-11-16 07:27:06 +08:00 via iPhone
op 可以去学习一下自己开发 winform 的控件,就会大概明白跟画漫画差不多,都是控制程序一帧一帧的刷新,然后连起来成为各种操作,比如 checkbox 按钮点击后将控件页面刷新为带勾的画面,动画也是这样制作的
|
41
JustSong 2022-11-16 08:05:31 +08:00 via Android
PyQt 还可以啊,用的 UI 绘制工具就是官方维护的啊
|
42
charlie21 2022-11-16 08:16:46 +08:00
GUI 开发的历史告诉我们这是一个(刻意被抽象出来的)套路很多的领域。web app 开发所用的基于组件的架构 component based architecture 仅仅是其中一个套路。具体可以参考
https://www.freecodecamp.org/news/is-mvc-dead-for-the-frontend-35b4d1fe39ec/ https://web.archive.org/web/20220224051139/https://www.jdon.com/48451 https://www.freecodecamp.org/news/is-mvc-dead-for-the-frontend-35b4d1fe39ec https://www.jianshu.com/p/dd61bff449a8 https://www.jianshu.com/p/293f74ca1f71 最后两篇文章是用 MVC 去理解 web app GUI (react.js) 开发,可见:MVC 作为一个设计模式的时候是一个 GUI 设计模式 / 软件工程工具; MVC 作为一个 “理解思路” 的时候是一个理解思路 / 思维工具,可以理解各种 GUI 设计模式。这样的思维工具是极为值钱却被低估的(尤其是相比 “编程语言就是工具、开发框架就是工具” 这些廉价工具而言,它是一个贵重工具),会使用这样的贵重工具是一个 experienced GUI 开发人员的要价筹码。 - |
43
shinsekai 2022-11-16 08:17:08 +08:00
为啥工具类软件非要 GUI 呢,命令行选项+回车不行吗
|
44
makelove 2022-11-16 08:34:53 +08:00
现在桌面 UI 是 html 的时代,不喜欢 electron 的安装包大可以用 tauri
至于你说的 delphi 这种拖放式画界面早淘汰了多少年了,非纯文本、操作效率低、不容易版本化 /diff... |
45
jink2018us 2022-11-16 08:38:36 +08:00
GUI 这种没有技术含量的东西发展了几十年居然还没搞出个所想即所得,op 这个专业的程序员按耐不住了
|
46
charlie21 2022-11-16 08:48:06 +08:00
https://github.com/iced-rs/iced#overview [1]
这是 rust 的一个 GUI 框架: iced Overview Inspired by The Elm Architecture, Iced expects you to split user interfaces into four different concepts: State — the state of your application Messages — user interactions or meaningful events that you care about View logic — a way to display your state as widgets that may produce messages on user interaction Update logic — a way to react to messages and update your state 在研究 GUI 开发理念的时候,关注这样的框架是我认为正确的研究方法。 因为 rust/iced 作为一个 GUI 框架它足够简单! [1]: 看看这种小众语言的 GUI 框架,它往往提供了最本质的东西,在一个足够简单的框架里。 [2]: 关于 “不复杂” 在进行 GUI 理念研究时候,一个不复杂的框架是必要的。不复杂的必要性是: 不复杂,但足以让一个 app 被开发出来。相比那些成熟语言的成熟框架,它仅仅做到了 “提供足够用的”:好处一 它没提供 “多余的概念 / 跑题的概念”( eg 各种 web 前端框架都有自己的一堆概念),好处二 它也没提供 “多余的实现 / 虽然没跑题但弄得很复杂” ( eg 各种 C# GUI Java Swing JavaFX 都有足够的多余的实现 比如 关于多线程的实现) [3]: 只有足够简单的东西才能让人去研究理念。否则只能招来学阀,用一堆不相干的概念把人砸蒙 ... 一个足够简单的东西才能拯救信息过载 |
47
kokutou 2022-11-16 08:48:59 +08:00 1
qt creator 一把梭
|
48
kujio 2022-11-16 08:50:25 +08:00 1
一般都是语言本身或者框架通过某一个 2D 图形渲染器 封装一些常用的组件。比如 button ,text 等等,然后根据抽象的布局代码 把这些组件放到指定位置。GUI 实际开发的精细度拖拖拽拽目前我见过的都不好用,在一个长长的列表里寻找想要设置的属性,远远没有敲几个关键字就能自动补全快和精准。更何况工作中因为业务问题需要大量自绘组件,当然 op 应该是不熟悉这种抽象方式,目前 gui 主流就命令式和声明式,命令式更容易理解,声明式更直观
|
50
yzld2002 2022-11-16 09:11:43 +08:00
有人试过 kotlin compose 么?
|
51
zjsxwc 2022-11-16 09:18:35 +08:00
我对 Gtk 了解比较多,9 年前大学毕业设计也是用 Gtk 做的 GUI 。
最开始我用[Glade]( https://glade.gnome.org/ )这种托拽生成 xml 的方式来弄界面, 后来搞 web 开发后我就很喜欢 mvvm 这种数据与 ui 双向绑定的方式, Gtk 也有这种 mvvm 开发方式,我比较推荐基于 rust 的[relm]( https://github.com/antoyo/relm ) 框架,它就是在原生 Gtk 上加了点 mvvm 机制,对于了解 Gtk 的开发者来说上手很快很顺滑。 总结:不管是之前 IDE 托拽界面的方式,还是老的手动编码布局方式,本质上就和 jQuery 搞前端界面一样,要处理界面回调要手动更新显示,对于复杂点的交互逻辑就很繁琐不好维护。 而使用 mvvm 方式的 ui 开发就决定了,它用编码方式比托拽界面更自然方便,所以同样基于托拽的安卓开发也很难使用 mvvm 方式来开发 ui 。 |
52
zxCoder 2022-11-16 09:26:58 +08:00
1. GUI 现在不流行
2. 需要 GUI 的场景不重视界面 -> 3. 靠谱的 GUI 库少,界面设计不方便 |
53
zxCoder 2022-11-16 09:27:09 +08:00
这有啥好困扰的
|
54
wangxiaoaer 2022-11-16 09:41:48 +08:00
@helone #13 这个 aardio 到底是何方神圣,听起来很厉害的样子? 原理是什么?看起来也比易语言这种正常点儿?
|
55
kujio 2022-11-16 09:55:20 +08:00 1
@yzld2002 试过,安卓方面很多库都开始支持 jetpack compose 了,kotlin desktop 方面目前只是个半成品,做安卓开发的可以了解一下,其他的我建议不如学 flutter
|
57
faketemp OP @fansvista
一句话,都是"业务场景"给逼的 需要开发内部工具给大家用 面对的是上至五六十下至二三十的人群 知道命令行的估计不足 3%;每人的系统也不同优麒麟 /xp/win7 各种;内网又不能随便安装 dotnet/jdk 等什么运行时 除了 Golang ,问天下百家编程语言,还有几个能不依赖运行时、跨系统编译支持同时又兼顾开发效率的存在?? 所以选 Golang 写了几款发现 Cli 程序自己用着爽、教人用熟难——想找个 GUI 库套上用用,才有上贴一问…… 自己业余用用玩下,所以才想知道 V 站"专业程序员"生产环境中到底是如何高效开发和维护 GUI 程序??? 顺便一提: 看回帖发现个别网友的阅读理解确实需要多练几个题[狗头] |
58
ChrisFreeMan 2022-11-16 10:20:42 +08:00
难道只有我一个人很讨厌写 GUI 需要界面拖拖拽拽吗,感觉就像在 P 图一样。😅
|
59
xdeng 2022-11-16 10:22:17 +08:00
拖控件的方法是比较低级的,做不了复杂的界面。
|
60
seers 2022-11-16 10:25:45 +08:00 via Android 1
我尝试了很多,最后还是 go+浏览器 b/s 最方便
|
61
paopjian 2022-11-16 10:57:49 +08:00
流传到现在的大部分软件都是多次迭代后的结果,qq 什么的甚至要自研二次开发引擎,可见 GUI 开发的麻烦,更别提环境的复杂了,用户用 XP 系统都有可能,也就是为啥 wine 适配这么吃力.
直接用 qt 之类的的原生界面就很丑,和 HTML 不用 CSS 也很丑是同理的,得一层层套皮美化 |
62
xz410236056 2022-11-16 11:14:48 +08:00
用 CLI 的程序员总是有一种莫名其妙的优越感,看不起 GUI 。
|
63
FcukYouTony 2022-11-16 11:17:04 +08:00
界面开发确实很难的, 不然后端程序员也太能打了
我记得好像就 ios 开发的拖拽控件还不错.......... |
64
musi 2022-11-16 11:20:25 +08:00
21 世纪的前端不就是“拿着设计给的 UI 图,然后在记事本 /IDE 中用代码一行行把界面绘制出来么”
|
65
mercury233 2022-11-16 11:24:50 +08:00
能理解 html+css 需要自己写 gui 代码,就能理解其他语言也需要了
|
66
zliea 2022-11-16 11:43:27 +08:00
流畅:各个系统厂商自己出,windows c#; mac swift
兼容且复杂:qt 兼容且简单:electron |
67
Shazoo 2022-11-16 11:47:06 +08:00
内部工具一般都是 PyQt 的。方便快捷。除了打包尺寸大点,没啥坏处。
用 QTDesigner 设计界面挺快捷准确。布局容器类型也足够充分的。 |
68
zhttp 2022-11-16 12:01:48 +08:00
我搞嵌入式的,只用过 QT ,会现在 qt creator 上面画出来,但是有时候单纯的拖拽满足不了需求,就会在代码里面再微调或者修改。
|
69
advicebullet 2022-11-16 12:37:32 +08:00 via iPhone
大部分文档、书籍虽然没有明确指出,但基本都是假定阅读者满足特定基础的。每个人的学习路径是不同的,编写者基本上也无法代入你的情况去考虑了。
|
70
SuperMild 2022-11-16 12:48:58 +08:00 via Android
|
71
raycool 2022-11-16 13:21:52 +08:00
我就是你说的手写 pyqt 的
界面都是先画个草稿,然后代码调整布局。 |
72
zjz1993 2022-11-16 13:31:49 +08:00
tauri
|
73
renmu 2022-11-16 13:35:40 +08:00 via Android
我寻思 electron 也不能拖控件。
写得多了就能差不多能脑补出来了 |
74
sparkpark 2022-11-16 13:45:46 +08:00
这样的话楼主不如将做的 cli 添加 api 接口,然后用 amis 拖出页面,打包时也能同 golang 打包到同一个二进制文件,然后别人基于浏览器使用
|
75
kaedeair 2022-11-16 14:10:13 +08:00
有个美工给的图就很好弄,有各个 UI 的位置关系
现在 GUI 框架基本上是声明式,通过声明组件的不同属性来确定位置 可以用直接锚定坐标的方式;也可以使用布局,向里面填充组件,每个组件内部也可以有自己的布局,这样套娃来的 |
76
LXGMAX 2022-11-16 14:22:09 +08:00
看了 OP 是有跨平台需求的,qt/c++是最方便,qt creator 不是有图形化界面编辑么
|
77
asuraa 2022-11-16 14:32:00 +08:00
|
78
CrazyRain0001 2022-11-16 14:50:55 +08:00
手写代码 layout ,手写布局 xml ,各种 Designer 拖(一般对非标准控件不友好),最后有设计要求的界面感觉还是 qml 写着最爽
|
79
magicdawn 2022-11-16 15:02:23 +08:00 via Android
你这就是伸手还嫌弃。
给了你自由,你嫌弃人家简陋; 给了你大而全,你嫌弃人家臃肿。 既然都那么不好,那你可以自己造轮子啊。 图形学本来就是三大浪漫之一 |
80
yaron 2022-11-16 15:03:23 +08:00
控件 + 布局,过程中美化,没有控件就自己写控件
|
81
xtinput 2022-11-16 15:04:01 +08:00
「都 21 世纪了真的有人写 GUI 程序是要靠脑海中想象出来一张界面草图,然后在记事本 /IDE 中用代码一行行把界面"绘制"出来的吗????」
都 21 世纪了 H5 的页面布局不是代码写的吗?都 21 世纪了 H5 还那么火? 又不是所有的语言都有相关的 GUI 框架 |
82
junziyangyang 2022-11-16 15:32:36 +08:00
javafx
|
83
kangyan 2022-11-16 15:35:50 +08:00
用 webview2 就行了,UI 还用网页那一套
|
84
danbai 2022-11-16 15:45:21 +08:00
不跟 html 一样
写布局调样式 处理事件 |
85
newmlp 2022-11-16 16:35:26 +08:00
写 gui 多了之后你会发现,还是自己纯代码脑补界面比较快且灵活,拖拽界面限制太多,还不如纯手打
|
86
pierswu 2022-11-16 17:46:09 +08:00
eclipse emf
|
87
peyppicp 2022-11-16 17:52:33 +08:00
给一个邪道建议,用游戏引擎写个 GUI ,比如 godot
|
89
1vonzhang 2022-11-16 21:43:32 +08:00 1
首先回答问题:C++ 或者 Python 用 Qt 既可以“拖拽画 GUI”,也可以“凭想象把脑海中的草图用代码画出来”,还可以用 QML 声明式写 UI ,应该是完全符合你的要求的。
其次表达观点:视频教程里告诉你哪几行是具体画什么的这种做法,没什么太大问题,你觉得这种视频不解决问题,是因为欠缺的是对设计图形界面的理解。GUI 不是说像画画一样堆起来就行了,形状、尺寸、布局、响应等等有很多种要素值得考虑,业界也有很多对这些因素成熟的解决方案。如果你对至少一种方案足够理解,从一种语言或者框架换到另一种的时候,只不过是把布局管理等等的问题,换了一个工具去解决,但是问题和解决办法,大同小异,并无二支。后端程序员看前端教程感觉都贼简单,但是上手就是做不出东西来,差的就是这个。你标题的”专业程序员“,应该至少是对图形界面不专业的。 |
90
shankun 2022-11-17 07:53:16 +08:00 via Android
javafx+scenebuilder 这个工具是拖拽,方法实现命名一一对应的。
|
91
AlexShui 2022-11-17 09:53:57 +08:00 via Android
前段时间写了一个 PyQt 项目,最开始全用 Python 代码写的,确实挺折磨人的。后来用 Qt Creator 可以拖拽生成大概布局,需要放入动态数据的控件部位留空,用代码生成,体验也不错。这两天看了 aardio ,,大概看了一下,东西是好东西,但是作者给人一种邪教的感觉(非贬义)🤔🤔
|
92
duan602728596 2022-11-17 11:15:18 +08:00
为啥用 Electron ,因为跨平台简单,组件库一大把,各种方便的框架一大把。别假设你想要点击 button 切换到新的 UI ,直接大把 router 库可以用。还有其他的配套设施,比如数据库之类的,这种如果自己跨平台编译,也是很高的成本。这些 Electron 都帮你做好了。
|
93
pocarisweat 2022-11-22 23:20:22 +08:00
写 GUI 其实真的挺烦的。
设计就不说了。如果你用传统的 MVC ,那势必要写大量辅助代码(拖拽控件限制很多,而且到头来很多东西不能完全用控件拖,所以更麻烦了);如果用 MVVM ,那首先要看框架编程体验好不好,即使很好,也可能逼到强迫症:比如我想显示一个弹出对话框,我还要专门引入一个状态控制这个对话框「是否显示」,然后需要的时候把它设置为 true. 还有就是命令行程序用到的 API 就那么些,想了解的很容易搜一下就知道,基本处于「我知道我知道」和「我知道我不知道」的状态。但看着自己日常用的 GUI 程序,会发现很多功能(比如全局搜索弹窗,或者诸如控制显示器等功能)完全没法用已知 API 去实现,甚至都不太清楚用什么关键字搜索。如果遇到苹果这种文档不太行的,就只能碰运气了。 |