V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
faketemp
V2EX  ›  问与答

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

  •  
  •   faketemp · 2022-11-15 19:14:57 +08:00 · 10357 次点击
    这是一个创建于 768 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    93 条回复    2022-11-22 23:20:22 +08:00
    YRInc
        1
    YRInc  
       2022-11-15 19:33:01 +08:00 via iPhone
    同问,同好奇。现行方案似乎是只有 C#配合 VS 来拖拽控件
    dw2693734d
        2
    dw2693734d  
       2022-11-15 19:40:53 +08:00
    要不 Electron ,要不 qt
    Frankcox
        3
    Frankcox  
       2022-11-15 19:41:14 +08:00
    C++的话有 QT ,至于其他的,python 写 GUI 的还有不少,Golang 我是真没见过几个知名 GUI ,可能是我孤陋寡闻吧
    Building
        4
    Building  
       2022-11-15 19:42:28 +08:00   ❤️ 15
    是什么让你这个专业程序员以为 GUI 就应该很简单?
    helone
        5
    helone  
       2022-11-15 19:44:05 +08:00   ❤️ 1
    golang 有 wails 和 Electron 差不多意思,不过各端调用系统的 webview ,可以试试
    kurarin
        6
    kurarin  
       2022-11-15 19:44:50 +08:00   ❤️ 1
    如果很在意‘到底是如何画出这个界面的’其实都不用在意,现在所谓画 UI 大部分的方案都是声明式 UI ,连前端都不用知道渲染引擎是怎么工作的。对于 OP 建议是看下 swiftUI 或者 tauri 的方案,可以让你更少关心 GUI 是怎么出来的
    faketemp
        7
    faketemp  
    OP
       2022-11-15 19:54:27 +08:00 via iPhone
    @Building 兄弟你这阅读理解建议多练几个题啊
    faketemp
        8
    faketemp  
    OP
       2022-11-15 19:55:38 +08:00 via iPhone
    @helone webview 好像 win10 以上系统才有内置 写的程序 win7 默认无法运行 xp 更不用说了
    adoal
        9
    adoal  
       2022-11-15 19:58:50 +08:00   ❤️ 3
    专业的 GUI 开发,在程序员做实现之前至少要需求工程师(现在流行叫产品经理)做原型设计,美工出图、标注、切图。
    所以有没有 RAD IDE 其实关系不是很大。有则好,比如用 WPF 开发可以先根据原型在 VS 里拖拉,再把 XAML 扔到 Expression 里套设计。没有的话也不是大问题。并不需要一万倍生产力的程序员脑海里 YY 界面再手写裸码。
    拖拽对于快速开发一些不讲究界面的工具或者业务系统来说确实可以在特定环节上有效提高生产力。但要求高的界面靠程序员反复拖拽着尝试怎么排布更好看是搞不出来的。
    faketemp
        10
    faketemp  
    OP
       2022-11-15 19:59:47 +08:00 via iPhone
    @kurarin 大佬 我不是好奇 gui 后面的运行原理 我是好奇文档或教程里几百行绘制 GUI 界面的代码 是用什么 ide 拖放控件画出来的 还是真的要自己靠想象一行行写代码绘出来
    lukaz
        11
    lukaz  
       2022-11-15 19:59:59 +08:00 via iPhone
    大多数 GUI 程序应该都是基于某个图形框架用代码堆出来的,使用现成的布局和组件,熟练的话写起来也不慢。用 Electron 不也得手写 HTML 吗?
    hujun528
        12
    hujun528  
       2022-11-15 20:02:57 +08:00
    MFC
    helone
        13
    helone  
       2022-11-15 20:03:26 +08:00   ❤️ 1
    @faketemp win 下基本就是 webview2 ,只有 win11 高版本用户才有,可以内嵌或者提示用户下载,如果要求 win7 下跑的话估计只能调 IE ,官方有文档,xp 无解,如果你只有 win 的需求可以试试 aardio ,这玩意主流语言都能调用,而且范例教程也多,缺点就是只能 win ,然后作者有点。。。
    adoal
        14
    adoal  
       2022-11-15 20:07:40 +08:00
    顺便,在 Visual Studio 里用 C/C++开发 Win32 GUI 程序时,当然也是有界面编辑器的。早期还没有 VS 的时候,有 VB 、VC ,你猜 VC 是啥?
    Abbeyok
        15
    Abbeyok  
       2022-11-15 20:07:56 +08:00
    除了商业软件以外,其他工具类软件实际上不会很在意界面,更多的是功能
    JerryY
        16
    JerryY  
       2022-11-15 20:08:54 +08:00
    Flutter 不是现在也能写了吗?
    ila
        17
    ila  
       2022-11-15 20:11:08 +08:00 via Android
    golang 自由度太大了,很多都要自己看 godoc.
    fyne 能用,需要时间摸索,如果之前没有写 gui 的经验,那是一脸懵
    cmdOptionKana
        18
    cmdOptionKana  
       2022-11-15 20:13:57 +08:00
    其实很好理解, 关键在于: 没什么是加一层抽象不能解决的, 如果不行, 就再加一层.

    基本思想就是弄个框架, 组件化, 里面有一些叫做 container 或 layout 的组件来帮助布局, 在布局里面堆组件.

    传统布局多数可以做固定布局, 那时搞一些拖拽工具是合理的, 但现代化布局提倡自适应, 根据窗口大小变化.

    绝大多数软件的布局都不会太复杂, 不管用什么方法, 都很好搞. 而有些特别复杂的, 不管用什么方法都很不好搞.
    keenoappend
        19
    keenoappend  
       2022-11-15 20:23:13 +08:00 via Android
    好奇+1 用 idea 是听别人说使用 java 实现的,但是那些图形库都没见过,很迷
    em70
        20
    em70  
       2022-11-15 20:25:39 +08:00   ❤️ 1
    每个语言都有自己擅长的领域,GUI 这个领域最强的就是 delphi,开发最简单,体积最小,对用户要求最低,开箱即用
    thedrwu
        21
    thedrwu  
       2022-11-15 20:35:16 +08:00 via Android
    @adoal 还有魔改精简版的 vc ,就剩 rc 和 res 编辑器,一张软盘就能装下,不论什么语言都能调用原生的资源 api 。

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

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

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

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

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

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

    -
    shinsekai
        43
    shinsekai  
       2022-11-16 08:17:08 +08:00
    为啥工具类软件非要 GUI 呢,命令行选项+回车不行吗
    makelove
        44
    makelove  
       2022-11-16 08:34:53 +08:00
    现在桌面 UI 是 html 的时代,不喜欢 electron 的安装包大可以用 tauri

    至于你说的 delphi 这种拖放式画界面早淘汰了多少年了,非纯文本、操作效率低、不容易版本化 /diff...
    jink2018us
        45
    jink2018us  
       2022-11-16 08:38:36 +08:00
    GUI 这种没有技术含量的东西发展了几十年居然还没搞出个所想即所得,op 这个专业的程序员按耐不住了
    charlie21
        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]:
    只有足够简单的东西才能让人去研究理念。否则只能招来学阀,用一堆不相干的概念把人砸蒙 ... 一个足够简单的东西才能拯救信息过载
    kokutou
        47
    kokutou  
       2022-11-16 08:48:59 +08:00   ❤️ 1
    qt creator 一把梭
    kujio
        48
    kujio  
       2022-11-16 08:50:25 +08:00   ❤️ 1
    一般都是语言本身或者框架通过某一个 2D 图形渲染器 封装一些常用的组件。比如 button ,text 等等,然后根据抽象的布局代码 把这些组件放到指定位置。GUI 实际开发的精细度拖拖拽拽目前我见过的都不好用,在一个长长的列表里寻找想要设置的属性,远远没有敲几个关键字就能自动补全快和精准。更何况工作中因为业务问题需要大量自绘组件,当然 op 应该是不熟悉这种抽象方式,目前 gui 主流就命令式和声明式,命令式更容易理解,声明式更直观
    kujio
        49
    kujio  
       2022-11-16 08:53:32 +08:00
    @charlie21 iced 目前还不支持非拉丁系的语言好像,前段时间刚好有研究过
    yzld2002
        50
    yzld2002  
       2022-11-16 09:11:43 +08:00
    有人试过 kotlin compose 么?
    zjsxwc
        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 。
    zxCoder
        52
    zxCoder  
       2022-11-16 09:26:58 +08:00
    1. GUI 现在不流行
    2. 需要 GUI 的场景不重视界面
    ->
    3. 靠谱的 GUI 库少,界面设计不方便
    zxCoder
        53
    zxCoder  
       2022-11-16 09:27:09 +08:00
    这有啥好困扰的
    wangxiaoaer
        54
    wangxiaoaer  
       2022-11-16 09:41:48 +08:00
    @helone #13 这个 aardio 到底是何方神圣,听起来很厉害的样子? 原理是什么?看起来也比易语言这种正常点儿?
    kujio
        55
    kujio  
       2022-11-16 09:55:20 +08:00   ❤️ 1
    @yzld2002 试过,安卓方面很多库都开始支持 jetpack compose 了,kotlin desktop 方面目前只是个半成品,做安卓开发的可以了解一下,其他的我建议不如学 flutter
    ungrown
        56
    ungrown  
       2022-11-16 09:59:08 +08:00   ❤️ 2
    @faketemp #7 醒醒,阅读理解就是做题做废的
    faketemp
        57
    faketemp  
    OP
       2022-11-16 10:02:36 +08:00
    @fansvista
    一句话,都是"业务场景"给逼的

    需要开发内部工具给大家用 面对的是上至五六十下至二三十的人群 知道命令行的估计不足 3%;每人的系统也不同优麒麟 /xp/win7 各种;内网又不能随便安装 dotnet/jdk 等什么运行时

    除了 Golang ,问天下百家编程语言,还有几个能不依赖运行时、跨系统编译支持同时又兼顾开发效率的存在??

    所以选 Golang 写了几款发现 Cli 程序自己用着爽、教人用熟难——想找个 GUI 库套上用用,才有上贴一问……

    自己业余用用玩下,所以才想知道 V 站"专业程序员"生产环境中到底是如何高效开发和维护 GUI 程序???

    顺便一提:
    看回帖发现个别网友的阅读理解确实需要多练几个题[狗头]
    ChrisFreeMan
        58
    ChrisFreeMan  
       2022-11-16 10:20:42 +08:00
    难道只有我一个人很讨厌写 GUI 需要界面拖拖拽拽吗,感觉就像在 P 图一样。😅
    xdeng
        59
    xdeng  
       2022-11-16 10:22:17 +08:00
    拖控件的方法是比较低级的,做不了复杂的界面。
    seers
        60
    seers  
       2022-11-16 10:25:45 +08:00 via Android   ❤️ 1
    我尝试了很多,最后还是 go+浏览器 b/s 最方便
    paopjian
        61
    paopjian  
       2022-11-16 10:57:49 +08:00
    流传到现在的大部分软件都是多次迭代后的结果,qq 什么的甚至要自研二次开发引擎,可见 GUI 开发的麻烦,更别提环境的复杂了,用户用 XP 系统都有可能,也就是为啥 wine 适配这么吃力.
    直接用 qt 之类的的原生界面就很丑,和 HTML 不用 CSS 也很丑是同理的,得一层层套皮美化
    xz410236056
        62
    xz410236056  
       2022-11-16 11:14:48 +08:00
    用 CLI 的程序员总是有一种莫名其妙的优越感,看不起 GUI 。
    FcukYouTony
        63
    FcukYouTony  
       2022-11-16 11:17:04 +08:00
    界面开发确实很难的, 不然后端程序员也太能打了
    我记得好像就 ios 开发的拖拽控件还不错..........
    musi
        64
    musi  
       2022-11-16 11:20:25 +08:00
    21 世纪的前端不就是“拿着设计给的 UI 图,然后在记事本 /IDE 中用代码一行行把界面绘制出来么”
    mercury233
        65
    mercury233  
       2022-11-16 11:24:50 +08:00
    能理解 html+css 需要自己写 gui 代码,就能理解其他语言也需要了
    zliea
        66
    zliea  
       2022-11-16 11:43:27 +08:00
    流畅:各个系统厂商自己出,windows c#; mac swift
    兼容且复杂:qt
    兼容且简单:electron
    Shazoo
        67
    Shazoo  
       2022-11-16 11:47:06 +08:00
    内部工具一般都是 PyQt 的。方便快捷。除了打包尺寸大点,没啥坏处。

    用 QTDesigner 设计界面挺快捷准确。布局容器类型也足够充分的。
    zhttp
        68
    zhttp  
       2022-11-16 12:01:48 +08:00
    我搞嵌入式的,只用过 QT ,会现在 qt creator 上面画出来,但是有时候单纯的拖拽满足不了需求,就会在代码里面再微调或者修改。
    advicebullet
        69
    advicebullet  
       2022-11-16 12:37:32 +08:00 via iPhone
    大部分文档、书籍虽然没有明确指出,但基本都是假定阅读者满足特定基础的。每个人的学习路径是不同的,编写者基本上也无法代入你的情况去考虑了。
    SuperMild
        70
    SuperMild  
       2022-11-16 12:48:58 +08:00 via Android
    @seers 确实,我自用的工具都是用 go 做个本地网站,自然就跨平台了,网页的前端框架又多又成熟,还能随时小改一下部署到服务器。

    可惜缺点也很明显,只能自用,大多数人不喜欢这种软件。
    raycool
        71
    raycool  
       2022-11-16 13:21:52 +08:00
    我就是你说的手写 pyqt 的
    界面都是先画个草稿,然后代码调整布局。
    zjz1993
        72
    zjz1993  
       2022-11-16 13:31:49 +08:00
    tauri
    renmu
        73
    renmu  
       2022-11-16 13:35:40 +08:00 via Android
    我寻思 electron 也不能拖控件。
    写得多了就能差不多能脑补出来了
    sparkpark
        74
    sparkpark  
       2022-11-16 13:45:46 +08:00
    这样的话楼主不如将做的 cli 添加 api 接口,然后用 amis 拖出页面,打包时也能同 golang 打包到同一个二进制文件,然后别人基于浏览器使用
    kaedeair
        75
    kaedeair  
       2022-11-16 14:10:13 +08:00
    有个美工给的图就很好弄,有各个 UI 的位置关系
    现在 GUI 框架基本上是声明式,通过声明组件的不同属性来确定位置
    可以用直接锚定坐标的方式;也可以使用布局,向里面填充组件,每个组件内部也可以有自己的布局,这样套娃来的
    LXGMAX
        76
    LXGMAX  
       2022-11-16 14:22:09 +08:00
    看了 OP 是有跨平台需求的,qt/c++是最方便,qt creator 不是有图形化界面编辑么
    asuraa
        77
    asuraa  
       2022-11-16 14:32:00 +08:00
    我跟你一样
    我现在已经投入 CEF3 的怀抱了兼职爽翻
    https://juejin.cn/book/7075387142121193502/
    CrazyRain0001
        78
    CrazyRain0001  
       2022-11-16 14:50:55 +08:00
    手写代码 layout ,手写布局 xml ,各种 Designer 拖(一般对非标准控件不友好),最后有设计要求的界面感觉还是 qml 写着最爽
    magicdawn
        79
    magicdawn  
       2022-11-16 15:02:23 +08:00 via Android
    你这就是伸手还嫌弃。
    给了你自由,你嫌弃人家简陋;
    给了你大而全,你嫌弃人家臃肿。

    既然都那么不好,那你可以自己造轮子啊。
    图形学本来就是三大浪漫之一
    yaron
        80
    yaron  
       2022-11-16 15:03:23 +08:00
    控件 + 布局,过程中美化,没有控件就自己写控件
    xtinput
        81
    xtinput  
       2022-11-16 15:04:01 +08:00
    「都 21 世纪了真的有人写 GUI 程序是要靠脑海中想象出来一张界面草图,然后在记事本 /IDE 中用代码一行行把界面"绘制"出来的吗????」

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

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

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

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

    还有就是命令行程序用到的 API 就那么些,想了解的很容易搜一下就知道,基本处于「我知道我知道」和「我知道我不知道」的状态。但看着自己日常用的 GUI 程序,会发现很多功能(比如全局搜索弹窗,或者诸如控制显示器等功能)完全没法用已知 API 去实现,甚至都不太清楚用什么关键字搜索。如果遇到苹果这种文档不太行的,就只能碰运气了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2328 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 15:56 · PVG 23:56 · LAX 07:56 · JFK 10:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.