文 / 蔡學鏞 年初和某家IT雜誌社編輯一同參加一場某軟體廠商辦的會議。主講人在台上展示使用他們技術開發出來的漂亮介面,相當吸引人。編輯看了之後,頗為讚許,轉身對我說:這東西很棒吧!我澆了她一盆冷水:要做到這樣的GUI(Graphical User Interface)效果,複雜度相當高,背後投入的資源相當多,可不是一般小公司做得出來的。對於GUI程式設計,我的考量點一直都不是「能不能做得到」,而是「容易做得到嗎」。 對許多人來說,學習一個新的編程語言不難,只要學會數十個關鍵字(keyword)的用法,瞭解程式模組、迴圈、分支、物件導向的語法,就可以開始寫程式了。語言本身雖然不困難,真正難的地方在各種領域的API,其中以GUI的API最複雜。 我有資格這麼說,因為在我的Java狂熱期,我幾乎學過用過所有官方的Java API,其中最複雜的不是EJB,而是Java Swing(Java的GUI API)。我將所有的Java Swing原文書都買回家(其中許多本都超過一千頁),一本接著一本詳細閱讀,也寫了不少程式,幾年之後,才能對它「完全」運用自如。這段期間我也花了不少精神在Java 2D API與Java 3D API上。 在Java之前,我學過Win32 GDI、MFC、OWL;在Java之後,我用過WinForms、GDI+,也接觸過Flex、WPF,它們全都是複雜的GUI API。(但還是比不上Java Swing的複雜。) 如果像我這樣喜歡GUI程式設計的人,都覺得GUI API太複雜,對於那些沒有投入許多時間到GUI的人來說,GUI根本就是開發軟體的一大障礙。 據我所知,許多學術領域的專家或教授,會使用各種編程語言,將自己的研究結果,寫成特殊領域的程式,例如氣象、水利、天文、自然語言處理...等。但是這些程式往往只有文字的輸入和輸出。他們很希望讓程式具有美觀的GUI介面,但是這部分他們做不來,正是因為大多數的GUI程式設計門檻都很高。 難道GUI程式設計都沒有什麼進化嗎?勉強算是有進化一點點。近十年來,在GUI設計上,我們經歷過三個主流階段,分別是:(1) C語言介面;(2) 元件化;(3) XML化。 在C語言介面的時期,任何動作都是透過C的函數呼叫,程式寫起來相當囉唆,也大量使用函式指標當作回呼函式(call-back)。 在「元件化」的時代,我們用OOP語言(C++、Java、C#)編寫GUI。通常我們會透過雙向(2-way)GUI設計工具(例如JBuilder、Visual Studio)的協助,讓我們可以用拖曳(drag-n-drop)的方式,產生出程式碼。對於這種自動產生出來的程式碼,我們最好不要徒手修改,否則可能會造成雙向GUI設計工具無法瞭解程式碼。因此,像JBuilder這樣的工具會將產生的程式碼獨立於建構子(constructor)之外,放在一個專門的jbInit()方法內,並希望編程員不要徒手修改此方法。 上面這種作法的缺點是,將GUI設計和程式邏輯混雜在一起。而GUI設計和程式設計是不同的專業領域,最好分開由各自的專家負責。除此之外,GUI的設計也比較偏宣告(declarative)的方式,而不是主流語言使用的命令(imperative)方式。 於是在「XML化」的時代,WPF和Flex的作法,允許我們將GUI設計的部分獨立出來,使用XML來描述(而不是使用編程語言)。XML可以當作描述語言,但有一些嚴重的缺點:(1) XML檔案不適合徒手編寫,最好要有工具的協助;(2) XML冗長,檔案大小暴增。 (3) XML缺乏彈性,XML適合用來描述結構性的資料,但不適合描述以外的東西。 上述進化過程,廠商都是利用「GUI設計工具」來簡化GUI開發過程的複雜度,而不是從簡化GUI API著手。因此,如果沒有「GUI設計工具」可用的話,根本沒有人有能力寫出像樣的GUI程式。加上主流GUI API不斷地改朝換代(例如MFC -> WinForms -> WPF),更是讓我們疲於奔命,剛熟悉一套API,又要開始學新的API。 有些人以不變應萬變,使用像Tk這樣的GUI套件。不管什麼語言,什麼平台都可以透過橋接器使用Tk。但是像Tk這樣的GUI套件往往太僵化,且不美觀,做出來的GUI效果並不吸引人,甚至和OS的GUI差異太大,畫面看起來顯得詭異。 由於GUI API的實做和OS的關係相當密切,能跨平台的部分不多,所以許多開放源碼的語言沒有足夠的資源做一套自己的GUI API,只好橋接到像Tk這樣的GUI套件,儘管不合適,也只好將就著使用。以Erlang來說,至今還沒有一套令人滿意的GUI API可用,於是內定使用Tk,但其實Erlang和Tk的設計理念根本是不搭的。 不管使用什麼語言,只要需要開發GUI,就會讓我頭痛一陣子。而短期內,這似乎沒有解藥。
相关推荐
学习Fidder主要掌握的技术——流量篡改
本文介绍了Fiddler工具的三种常用调试方法:1)本地映射-通过保存修改JSON响应文件实现接口数据模拟;2)Composer接口调试-通过修改请求参数快速测试接口异常处理;3)断点调试-在请求/响应过程中拦截并修改数据。这三种方法分别适用于前端开发、接口测试和健壮性验证等场景,能够有效提高调试效率。操作步骤包括保存响应、修改数据、配置规则等关键环节,并提供了详细的界面操作指引。
F#语言的图形用户界面
F#是一种多范式编程语言,支持函数式、面向对象和命令式编程。它是微软开发的一部分,基于.NET框架运行。F#的语法简洁,易于理解,尤其适合处理复杂的算法和数据处理任务。类型推导:F#提供强大的类型推导功能,使得开发者在定义变量时无需显式指定类型,这让代码更加简洁。不可变性:F#默认使用不可变对象,使得程序逻辑更容易推理和维护,尤其在并发编程中表现出色。模式匹配:F#的模式匹配功能能够让开发者快速匹配数据结构,非常适合处理复杂条件。异步编程。
AI提示词实战:用EARS语法5步搞定产品需求拆解(附完整案例)
本文详细介绍了如何运用EARS语法将模糊的产品需求进行原子化拆解,转化为清晰、可执行的结构化指令。通过一个完整的自由职业者项目管理工具案例,演示了从原始需求分析到构建增强AI提示词的五步实战流程,帮助产品经理和技术人员实现高效、精准的需求传达与协作。
F#教程(一)
一、F# 入门 F# 是微软推出的一种 可以进行面向对象开发的函数式编程语言。它可以把函数做对象一样使用,可以用很简捷的语法实现非常复杂逻辑的程序。与C语言相比几个方面语法的特点:1.为了方便语言的逻辑操作,实现了比较多样的数据类型。除编程语言所拥有的基本数据类型外,还实现了Tuple、List、Option、Array、Sequence、Generic、Record、Discriminated Union、Enumeration、Class等数据类型。2.为了简化逻辑操作的语法实现了Match Expre
uniapp: err = err.replace(this._UNI_INPUT_DIR_REG, ‘UNI_TypeError: err.replace is not a function问题修复
问题:uniapp的依赖包出现了问题,需要升级解决办法:升级uniapp依赖包,下载"semver"和”@dcloudio/uni-i18n“两个包,本地锁定postcss为7版本,就解决了。
BGE-Reranker-v2-M3介绍
重排序模型介绍
DearPyGui:突破Python GUI开发瓶颈的高性能图形界面框架
你是否曾经为Python GUI开发的性能瓶颈而烦恼?是否在寻找一个既能处理大数据可视化,又能保持流畅交互体验的解决方案?今天,让我们深入探索DearPyGui——这款基于现代C++和GPU渲染的Python GUI框架,它将彻底改变你对Python图形界面开发的认知。 DearPyGui是一个革命性的Python GUI工具包,采用即时模式架构,通过GPU加速技术实现百万级数据点的流畅显示。与
UG\NX二次开发 一个创建小平面体的例子
介绍。
emWin GUI开发实战:API异常与性能瓶颈的系统诊断与优化
在嵌入式系统开发中,图形用户界面(GUI)的实现与优化是提升产品交互体验的关键环节。其核心原理在于通过高效的图形库和驱动,在有限的处理器与内存资源上完成界面渲染与事件响应。从技术价值看,一个稳定高效的GUI层能显著降低系统负载,确保实时性,并延长设备续航。典型的应用场景包括智能家居控制面板、工业人机界面(HMI)、医疗设备显示终端等,这些场景对界面的流畅度与可靠性有极高要求。本文聚焦于嵌入式领域广泛使用的emWin图形库,深入探讨其API函数行为异常与界面性能瓶颈这两大常见挑战。通过剖析官方提供的`GUID
ShardingSphere 分库分表避坑:扩容数据迁移时,如何做到“不停机、不丢数据”?
停机:发布公告,凌晨 0 点停止对外服务。洗数据:跑一个巨大的脚本,把旧库数据 Hash 算出新路由,写入新库。改配置:修改代码里的分片规则。重启:祈祷数据没丢,服务正常。这种“刀耕火种”的方式,风险极高,且随着数据量增大,停机时间会变得不可接受。我们需要的是Online Migration (在线迁移)。分库分表扩容不再是“听天由命”的赌博。通过,我们将一次高风险的“运维操作”变成了一个可控的、可视化的“数据流转过程”。方案停机时间复杂度回滚难度传统停机清洗。
药物对接仿真软件:HADDOCK_(16).实践项目:抗体-抗原对接案例
定义分子结构文件。
告别C++编译慢与性能瓶颈:仓颉语言重构Qt跨平台GUI开发新范式
跨平台GUI开发一直是软件开发领域的核心挑战。传统C++开发面临编译缓慢、内存管理复杂等痛点,而Python、JavaScript等语言在性能上又难以满足高要求场景。CJQT项目通过仓颉语言对Qt框架进行现代化封装,为开发者提供了全新的跨平台GUI开发解决方案。 ## 跨平台GUI开发的现状与挑战 当前主流的跨平台GUI开发方案各有优劣,但都存在明显短板: | 方案 | 优势 | 挑战 |
CKAD-CN考试之路----12
显然,对应的value都已经实现了加密.保存退出,等待pod重新创建。确认secret是否被加密。编辑secret文件。
python gui可视化编程_使用Python语言的GUI可视化编程设计
使用Python语言的GUI可视化编程设计耿颖【期刊名称】《单片机与嵌入式系统应用》【年(卷),期】2019(019)002【摘要】InordertoimprovetheefficiencyofdevelopingGUI,theresearch and development of Python visual programming environmentiscarriedout.Inthepap...
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
嵌入式GUI开发实战:基于GUI Guider与LVGL的MM32F5270界面设计与存储优化
在嵌入式系统开发中,图形用户界面(GUI)的实现是提升产品交互体验的关键。其核心原理在于通过图形库(如LVGL)在资源受限的微控制器(MCU)上渲染界面元素并处理用户输入。这项技术的价值在于能够为智能家居、工业HMI等设备提供直观的操作界面。然而,嵌入式开发常面临Flash存储空间的严格限制,这直接影响了复杂界面的实现。针对此瓶颈,一种有效的工程实践是结合GUI设计工具(如GUI Guider)进行快速原型开发,并利用QSPI Flash扩展方案来突破片内存储容量。具体到MM32F5270平台,通过Boot
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
如何快速掌握JD-GUI:Java开发者的完整反编译指南
JD-GUI是一款功能强大的独立Java反编译工具,能帮助开发者轻松查看和分析Java字节码文件。本文将为你提供一份全面的指南,助你快速上手这款必备开发工具。 ## 什么是JD-GUI? JD-GUI(Java Decompiler GUI)是一个独立的图形界面工具,专门用于反编译Java类文件。它能够将编译后的.class文件转换回可读性强的Java源代码,是Java开发者分析第三方库、调试
efm32 入门.pdf
本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。
Go语言中的图形界面开发:从GUI到WebAssembly
WebAssembly(简称Wasm)是一种二进制指令格式,它可以在现代Web浏览器中运行,提供接近原生的性能。Go语言从1.11版本开始支持WebAssembly编译目标。Go语言的图形界面开发从传统的GUI库到现代的WebAssembly,提供了多种选择。传统GUI库的使用,如fyne、gtk和qtWebAssembly的基本概念和使用方法移动应用开发的方法图形界面开发的最佳实践实际案例分析常见问题与解决方案。
选哪个C图形库做开发?主流库优缺点与性能瓶颈分析
目前主流C图形库大致分为两类:一类是提供底层绘图接口的轻量库,另一类是功能丰富的GUI框架。选择合适的图形库,能极大影响跨平台开发效率和最终程序的性能。我将结合实际使用经验
嵌入式GUI开发:emWin多边形绘制原理、函数详解与实战优化
在嵌入式系统开发中,2D图形绘制是人机交互界面的核心技术,它基于基本的几何图形如多边形进行构建。其原理是通过定义顶点坐标,利用扫描线填充等算法实现图形的轮廓绘制与区域填充,这为动态、复杂的矢量图形显示提供了基础。这项技术的核心价值在于,它允许开发者在资源受限的嵌入式环境中,以编程方式高效生成和操控图形元素,从而减少对预渲染位图的依赖,节省宝贵的内存空间。其典型应用场景广泛覆盖了工业仪表盘、医疗监护仪波形图以及智能家居面板图标等需要实时刷新的可视化界面。本文聚焦于emWin图形库,深入解析其多边形绘制的核心函
嵌入式GUI开发实战:emWin 2D图形绘制与位图显示优化
在嵌入式系统开发中,2D图形绘制是构建用户界面的核心技术,其性能直接影响用户体验。其原理基于扫描线填充、坐标变换等算法,在资源受限的MCU上实现高效渲染。这项技术的核心价值在于,能够在有限的CPU和内存资源下,实现流畅的动画与清晰的图形显示,是嵌入式GUI开发的基石。典型的应用场景包括工业HMI、医疗仪表、智能家居面板等设备的人机交互界面。本文聚焦于emWin图形库,深入探讨其多边形绘制API(如`GUI_DrawPolygon`)与位图显示(如`GUI_BMP_Draw`)的底层机制与高级优化技巧,例如通
GUI与CLI环境下AI代理执行瓶颈剖析:从屏幕操作到技能调用的效率跃迁
在自动化与智能化技术领域,代理(Agent)作为能够感知环境并执行动作以完成目标的程序,其执行效率高度依赖于交互环境。图形用户界面(GUI)与命令行界面(CLI)构成了两种本质不同的环境:GUI是为人类视觉设计的、高维且非结构化的像素世界,而CLI是为机器交互设计的、线性且结构化的文本流。从技术原理看,代理在GUI中操作面临巨大的“语义鸿沟”,需要将像素信息转化为可执行意图,这一过程涉及复杂的计算机视觉或UI元素树解析,计算密集且易受界面动态变化干扰。相比之下,在CLI环境中,代理通过调用封装好的技能(如命
353



被折叠的 条评论
为什么被折叠?



