非常简单,简洁易用的GUI编程“框架”

请列出GUI编程库,工具包,允许快速编写GUI应用程序的框架。 我的意思是这样的

  • graphics用户界面(GUI)完全由人类可读的(和人类可写的)纯文本文件(代码)
  • 代码是简洁的(每个控件/事件对有1或2行代码),适合脚本编写
  • GUI的结构和操作从代码(小部件的嵌套和事件stream)
  • 隐藏了关于如何构buildGUI的细节(比如mainloop,附加事件监听器等)
  • 支持自动布局(vboxes,hboxes等)

如答案所示,这可能被定义为声明式 GUI编程,但不一定是这样的。 任何方法都可以,如果可行,易于使用和简洁。

有一些这样的GUI库/工具包。 他们在下面列出。 如果您看到缺less合格的工具包,请扩展列表。 指出项目是否跨平台,成熟,积极,如果可能,举个例子。

请使用这个wiki来讨论只有开源项目。

这是目前列表(按字母顺序):

Fudgets

Fudgets是一个Haskell库。 平台:Unix。 状态:实验,但仍然保持。 一个例子:

import Fudgets main = fudlogue (shellF "Hello" (labelF "Hello, world!" >+< quitButtonF)) 

Fudgets示例截图http://www.picamatic.com/show/2009/01/28/02/40/1883597_93x80.gif

GNUstep文艺复兴

文艺复兴允许用简单的XML描述GUI。 平台:OSX / GNUstep。 状态:GNUstep的一部分。 下面是一个例子:

 <window title="Example"> <vbox> <label font="big"> Click the button below to quit the application </label> <button title="Quit" action="terminate:"/> </vbox> </window> 

文艺复兴实例截图http://www.picamatic.com/show/2009/01/28/03/19/1884098_289x80.png

HTML

基于HTML的GUI(HTML + JS)。 跨平台,成熟。 可以完全在客户端使用。

寻找一个不错的“helloworld”的例子。

HTML GUI示例http://www.picamatic.com/show/2009/01/28/02/44/1883635_264x60.png

JavaFX的

JavaFX可用于独立(桌面)应用程序以及Web应用程序。 不完全跨平台,还没有完全开源。 状态:1.0版本。 一个例子:

  Frame { content: Button { text: "Press Me" action: operation() { System.out.println("You pressed me"); } } visible: true } 

截图是需要的。

阿福

Phooey是另一个Haskell库。 跨平台(wxWidgets),HTML + JS后端计划。 成熟和积极。 一个例子(比helloworld多一点):

  ui1 :: UI () ui1 = title "Shopping List" $ do a <- title "apples" $ islider (0,10) 3 b <- title "bananas" $ islider (0,10) 7 title "total" $ showDisplay (liftA2 (+) ab) 

Phooey示例截图http://www.picamatic.com/show/2009/01/28/02/33/1883543_236x187.png

PythonCard

PythonCard在Python字典中描述GUI。 跨平台(wxWidgets)。 有些应用程序使用它,但项目似乎停滞不前。 有一个活动的叉子。

我跳过了PythonCard的例子,因为这个比赛太冗长了。

PythonCard示例截图http://www.picamatic.com/show/2009/01/28/02/46/1883646_199x99.gif

Ruby的鞋子 。 平台:Win / OSX / GTK +。 状态:年轻但活跃。 一个最小的应用程序是这样的:

  Shoes.app { @push = button "Push me" @note = para "Nothing pushed so far" @push.click { @note.replace "Aha! Click!" } } 

鞋示例截图http://www.picamatic.com/show/2009/01/28/03/14/1884011_227x71.png

的Tcl / Tk

Tcl / Tk 。 跨平台(它自己的小部件集)。 成熟(可能甚至过时)和积极。 一个例子:

  #!/usr/bin/env wish button .hello -text "Hello, World!" -command { exit } pack .hello tkwait window . 

Tcl / Tk示例截图http://www.picamatic.com/show/2009/01/28/02/51/1883672_111x58.png

tekUI

tekUI为Lua(和C)。 平台:X11,DirectFB。 状态:Alpha(可用,但API仍在演变)。 一个例子:

  #/usr/bin/env lua ui = require "tek.ui" ui.Application:new { Children = { ui.Window:new { Title = "Hello", Children = { ui.Text:new { Text = "_Hello, World!", Style = "button", Mode = "button", }, }, }, }, }:run() 

tekUI helloworld截图http://www.picamatic.com/show/2009/01/28/03/01/1883821_290x55.png

Treethon

Treethon for Python。 它描述了YAML文件中的GUI( YAML树中的Python )。 平台:GTK +。 状态:在proress工作。 一个简单的应用程序如下所示:

  _import: gtk view: gtk.Window() add: - view: gtk.Button('Hello World') on clicked: print view.get_label() 

Treethon helloworld截图http://treethon.googlecode.com/svn/trunk/treethon_gtk_tutorial/base.png

Richard Jones的未命名的Python库:

这一个还没有发布。 这个想法是使用Python上下文pipe理器( with关键字)来构buildGUI代码。 详情请看Richard Jones的博客 。

 with gui.vertical: text = gui.label('hello!') items = gui.selection(['one', 'two', 'three']) with gui.button('click me!'): def on_click(): text.value = items.value text.foreground = red 

XUL

XUL + Javascript可以用来创buildXULRunner和Mozilla扩展的独立桌面应用程序。 成熟,开源,跨平台。

  <?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin/" type="text/css"?> <window id="main" title="My App" width="300" height="300" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <caption label="Hello World"/> </window> 

XUL helloworld示例http://www.picamatic.com/show/2009/01/28/03/27/1884209_228x108.png


感谢您的贡献!

不要小孩,但HTML。

它是跨平台的,在一个简单的文本文件中总结了gui-layout。 这绝对是成熟的,以及很好的理解和有据可查的。

有很多方法可以为dynamic内容模板化HTML文件,也可以使用其他方法将自定义语法转换为HTML(如果您不喜欢使用尖括号)。

带有Javascript的客户端脚本,使用PHP / Ruby / Python / Perl的服务器端脚本。

这并不适合所有目的,但是对于很多人来说,这已经足够了。 没有任何理由需要服务 – 如果你愿意的话,你可以分发一个HTML文件给你的客户 – 看看TiddlyWiki是一个很好的例子。

除了鞋子之外,你所描述的是陈述式编程的新概念。 我更多地将鞋形容为GUI 域指定语言 。 那么,我说新的:Visual Basic的forms,如果你在IDEdevise师的背后,是陈述式的。 所以,再回头来看,是Oracle的SQL * Forms,尽pipe将它们与文本编辑器组装起来只是一个非常勇敢的过程。

为了在列表中添加另一个,Microsoft还提供了XAML ,其中介绍了为WPF构build的GUI。

尽pipe上面提到的一些scheme非常简单,但是声明式定义的GUI可以像代码中定义的那样复杂,它们更简单,更简洁:他们会说“想要发生什么”,并将其留给底层框架来处理“如何”。

TCL / TK是一种用于交互式构buildGUI的脚本语言。 它可以在各种平台上使用,包括Unix,Windows和Mac OS X.

睡衣 – http://pyjs.org – 这是一个桌面小部件集,伪装成基于AJAX的web 2.0小部件集。 它是如此非常不像一个networking小部件集,我实际上将其移植桌面 – http://pyjd.org – 使用webkit(在Adobe AIR,谷歌浏览器,Safari浏览器相同的引擎)

这是“你好世界”:

从pyjamas.ui.RootPanel导入RootPanel
从pyjamas.ui.Button导入Button
从睡衣导入窗口

 def greet(fred):
     Window.alert(“Hello,AJAX!”)

如果__name__ =='__main__':
     b =button(“点击我”,打招呼)
     RootPanel()。添加(B)

立即回答五个要求中的前四个。 要求5通过以下来实现:

从pyjamas.ui.RootPanel导入RootPanel
从pyjamas.ui.Horizo​​ntalPanel导入Horizo​​ntalPanel
从pyjamas.ui.HTML导入HTML

 p = Horizo​​ntalPanel()
 p.add(HTML( “<B>你好</ B>”))
 p.add(HTML( “世界”))
 RootPanel()。增加(P)

它不可能变得更简单。

XUL (使用起来非常简单,而且function强大 – 大部分的Firefox都是使用XUL来实现GUI结构的,+ javascript则用于逻辑处理)

XUL教程有一些很好的例子。 这是一个tabboxes 。 页面底部有一个可切换的选项卡,button,编辑框和组框,它非常简单(无Javascript / CSS / XBL /键绑定/等)。 然后他们逐渐添加更多的 东西 ,这是指定文件长度的很多function。 (至less直到你开始添加javascript来处理所讨论的逻辑)如果我必须在Win32中这样做,这将是一个真正的痛苦。

wxLua是Lua的wxWidgets库的一个包装器。 它使用Connect方法将gui widget事件附加到函数(函数是像JS中的第一类)。

GTK-server使用非常简单,可以使用30多种语言,包括Bash和Visual Basic。

SDL / Swing非常简洁,可读,不显眼(283k lib,没有依赖关系),易于使用。 例:

 menus { "File" { "Open" do="open" // calls "open()" in the controller "---" "Exit" do="exit" } } 

它的开源,但享受Ikayzo.com的商业支持。 .NET和iOS的端口正在进行中。

我今天遇到了SDL / Swing 。

如果你在.NET平台上,你应该看看XAML