困扰已久,专业程序员到底怎么写 GUI 程序?

2022-11-15 19:14:57 +08:00
 faketemp

这个问题好奇和困扰已久,实在忍不住我要问出来——如果开发一个 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 ,这个怎么说呢,编个计算器都几十兆我实在难以接受...

10362 次点击
所在节点    问与答
93 条回复
thedrwu
2022-11-15 20:35:16 +08:00
@adoal 还有魔改精简版的 vc ,就剩 rc 和 res 编辑器,一张软盘就能装下,不论什么语言都能调用原生的资源 api 。

微软原本只想走纯图形操作的路线,走不通又回来拥抱 powershell ,python ,wsl
tool2d
2022-11-15 21:17:37 +08:00
最初 win32 那套 ui 消息系统设计很好,后来面向对象流行,硬是给封装成了 MFC ,从此开起了 no zuo no die 之路。
最终代码实在太复杂,官方自己都放弃维护了。
所以我一直觉得,相对简单的代码设计,生命力才够持久。
subframe75361
2022-11-15 21:26:20 +08:00
低代码+pwa ?样式布局不用写代码,只需要写逻辑,pwa edge 自带直接安装成应用
jjx
2022-11-15 21:28:55 +08:00
就是桌面程序

高级阶段都是用 layout 布局的
nightwitch
2022-11-15 21:53:13 +08:00
重量级一点的 GUI 框架一般都支持 界面和代码分离,UI 是声明式的。你看到的界面和样式通常由文本语言描述,GUI 框架反序列化得到整个 UI 的结构和样式。程序员只用和 UI 约定好不同控件的名字,以及实现不同控件之间的交互和背后的功能。UI 长什么样对于程序是无感知的。

当然简单点的 GUI 程序都是在代码里直接添加控件耦合在一起,其实没那么难,大多数 UI 相关的代码重复度都很高,复制粘贴改改控件的名字以及样式,以及一些响应事件就完事。
cxh116
2022-11-15 22:19:19 +08:00
看本 android 原生程序开发的书再写个简单的 app 差不多就能理解了
ljsh093
2022-11-15 22:33:54 +08:00
网页也不存在拖拖拖点点点就出的 GUI 吧?要不试试 unity2d ?
paramagnetic
2022-11-15 22:36:10 +08:00
Labview 了解一下(逃
L4Linux
2022-11-15 22:38:32 +08:00
不止 GUI ,大多数项目的文档极度匮乏,写的时候一半靠猜,一半靠运行的时候行为不合预期才知道该怎么写。
inframe
2022-11-16 00:10:04 +08:00
通用的 Native GUI 程序已经没落😪,总感觉是快淘汰的技术
小项目 WinForm 拖拖算了,想搞清楚原理的话,《 windows 核心编程》 C++版对非自绘的 UI 编程实现描述很详细。
uvwlab
2022-11-16 00:20:09 +08:00
QT 纯代码开发
ziyic
2022-11-16 00:22:07 +08:00
大概被 html 折磨过的应该都会觉得常见 UI 框架很好想象吧……(原型图应该会有专门的设计部门负责)
现在很多都是声明式了……就是很简单的从左往右从上到下的排列,具体尺寸也可以定义……用习惯了会觉得拖拖拽拽才麻烦😂
wzzzx
2022-11-16 01:30:48 +08:00
试试 QML ,大概就是知道要一个怎样的组件,然后调整它的各种样式,反复试
wasd6267016
2022-11-16 01:45:54 +08:00
pyqt + pyqtdesigner 算是比较简单的了
能拖动摆好界面 基于 python
当然更复杂的也不好实现 没办法
t6attack
2022-11-16 02:18:30 +08:00
运行效率最高的 原生桌面 GUI 开发,这方面核心技术掌握在越来越少的人手里。
所以别挣扎了。辛辛苦苦从公开渠道搜集一些资料,最后学到的是人家 20 多年前的技术。
掉队的人只能玩玩层层封装的现代框架,就是你说的这些。
dcsuibian
2022-11-16 02:54:27 +08:00
按我的理解,lz 之前写 GUI 时都是用 winform 这种所见即所得( WYSIWYG )的编辑器,所以现在看到用编码的方式写界面感到特别诧异。

但现在真的就是用编码方式写界面的。大多数是用某 ml ( html 、qml 、xaml )等标记语言写,确实不直观。
为什么?我不知道,也没搜到满意的答案。我觉得可能是因为用这种方式写,程序员掌控力更强。

至于具体的过程:
如果是大公司,有美工的话,那么可以用设计软件( Figma )之类的画个设计图出来,前端程序员负责实现。
如果是全干程序员,那么就是靠想象草图的,不过是边看边改的,不是先把所有控件的位置大小信息都写好后再预览的。
dcsuibian
2022-11-16 02:58:14 +08:00
就比如我现在想做当前这个帖的页面。
可以看到主要内容是居中的,那我就会先创建一个控件容器,把它居中,设个 1000px ,在网页上看看效果。如果大了或小了就重新调整样式。
然后再继续做里面的空间,调样式。比如左边是帖子的内容,右边是个人信息和广告。边看边改。
advicebullet
2022-11-16 03:12:15 +08:00
拖控件只是在生成界面的代码,没有设计工具的情况下就只能手写。

哪怕只有一点点 HTML 基础也能理解吧。
g00001
2022-11-16 06:59:53 +08:00
@helone 话别说一半,aardio 作者有点什么呢 ? 作为个人作者用 17 年的时间开发 aardio ,十几年始终坚持干净免费。用户反馈的问题以极快的速度响应,十几年保持活跃更新。在头条这些平台上可以看到作者几乎是有问必答,范例教程也是不停地发表,你自己也说了范例教程很多。aardio 也将可视化开发环境分享给其他编程语言,与所有编程语言交朋友,远离语言之争,你自己也说了,aardio 支持很多主流语言。还需要有点什么?!
god7d
2022-11-16 07:27:06 +08:00
op 可以去学习一下自己开发 winform 的控件,就会大概明白跟画漫画差不多,都是控制程序一帧一帧的刷新,然后连起来成为各种操作,比如 checkbox 按钮点击后将控件页面刷新为带勾的画面,动画也是这样制作的

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

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

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

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

© 2021 V2EX