困扰已久,专业程序员到底怎么写 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 ,这个怎么说呢,编个计算器都几十兆我实在难以接受...

10553 次点击
所在节点    问与答
93 条回复
xtinput
2022-11-16 15:04:01 +08:00
「都 21 世纪了真的有人写 GUI 程序是要靠脑海中想象出来一张界面草图,然后在记事本 /IDE 中用代码一行行把界面"绘制"出来的吗????」

都 21 世纪了 H5 的页面布局不是代码写的吗?都 21 世纪了 H5 还那么火?

又不是所有的语言都有相关的 GUI 框架
junziyangyang
2022-11-16 15:32:36 +08:00
javafx
kangyan
2022-11-16 15:35:50 +08:00
用 webview2 就行了,UI 还用网页那一套
danbai
2022-11-16 15:45:21 +08:00
不跟 html 一样
写布局调样式
处理事件
newmlp
2022-11-16 16:35:26 +08:00
写 gui 多了之后你会发现,还是自己纯代码脑补界面比较快且灵活,拖拽界面限制太多,还不如纯手打
pierswu
2022-11-16 17:46:09 +08:00
eclipse emf
peyppicp
2022-11-16 17:52:33 +08:00
给一个邪道建议,用游戏引擎写个 GUI ,比如 godot
lightjiao
2022-11-16 18:50:27 +08:00
@peyppicp
一点都不邪道,反而很方便,我就日常用 Unity 写桌面程序,简单快捷,甚至自带跨平台
1vonzhang
2022-11-16 21:43:32 +08:00
首先回答问题:C++ 或者 Python 用 Qt 既可以“拖拽画 GUI”,也可以“凭想象把脑海中的草图用代码画出来”,还可以用 QML 声明式写 UI ,应该是完全符合你的要求的。

其次表达观点:视频教程里告诉你哪几行是具体画什么的这种做法,没什么太大问题,你觉得这种视频不解决问题,是因为欠缺的是对设计图形界面的理解。GUI 不是说像画画一样堆起来就行了,形状、尺寸、布局、响应等等有很多种要素值得考虑,业界也有很多对这些因素成熟的解决方案。如果你对至少一种方案足够理解,从一种语言或者框架换到另一种的时候,只不过是把布局管理等等的问题,换了一个工具去解决,但是问题和解决办法,大同小异,并无二支。后端程序员看前端教程感觉都贼简单,但是上手就是做不出东西来,差的就是这个。你标题的”专业程序员“,应该至少是对图形界面不专业的。
shankun
2022-11-17 07:53:16 +08:00
javafx+scenebuilder 这个工具是拖拽,方法实现命名一一对应的。
AlexShui
2022-11-17 09:53:57 +08:00
前段时间写了一个 PyQt 项目,最开始全用 Python 代码写的,确实挺折磨人的。后来用 Qt Creator 可以拖拽生成大概布局,需要放入动态数据的控件部位留空,用代码生成,体验也不错。这两天看了 aardio ,,大概看了一下,东西是好东西,但是作者给人一种邪教的感觉(非贬义)🤔🤔
duan602728596
2022-11-17 11:15:18 +08:00
为啥用 Electron ,因为跨平台简单,组件库一大把,各种方便的框架一大把。别假设你想要点击 button 切换到新的 UI ,直接大把 router 库可以用。还有其他的配套设施,比如数据库之类的,这种如果自己跨平台编译,也是很高的成本。这些 Electron 都帮你做好了。
pocarisweat
2022-11-22 23:20:22 +08:00
写 GUI 其实真的挺烦的。

设计就不说了。如果你用传统的 MVC ,那势必要写大量辅助代码(拖拽控件限制很多,而且到头来很多东西不能完全用控件拖,所以更麻烦了);如果用 MVVM ,那首先要看框架编程体验好不好,即使很好,也可能逼到强迫症:比如我想显示一个弹出对话框,我还要专门引入一个状态控制这个对话框「是否显示」,然后需要的时候把它设置为 true.

还有就是命令行程序用到的 API 就那么些,想了解的很容易搜一下就知道,基本处于「我知道我知道」和「我知道我不知道」的状态。但看着自己日常用的 GUI 程序,会发现很多功能(比如全局搜索弹窗,或者诸如控制显示器等功能)完全没法用已知 API 去实现,甚至都不太清楚用什么关键字搜索。如果遇到苹果这种文档不太行的,就只能碰运气了。

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

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

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

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

© 2021 V2EX