请列出允许快速编写 GUI 应用程序的 GUI 编程库、工具包和框架。我的意思是这样的
- GUI 完全在一个人类可读(和人类可写)的纯文本文件(代码)中描述
- 代码很简洁(每个小部件/事件对 1 或 2 行代码),适用于脚本
- 从代码中可以看出 GUI 的结构和操作(小部件的嵌套和事件流)
- 隐藏了有关如何构建 GUI 的详细信息(诸如 mainloop、附加事件侦听器等)
- 支持自动布局(vbox、hbox 等)
正如答案所暗示的那样,这可能被定义为声明式 GUI 编程,但不一定如此。如果可行,任何方法都可以,易于使用且简洁。
有一些像这样的 GUI 库/工具包。它们在下面列出。如果您发现缺少符合条件的工具包,请扩展该列表。指出项目是否跨平台、成熟、活跃,并在可能的情况下举例说明。
请使用此 wiki仅讨论开源项目。
这是到目前为止的列表(按字母顺序):
软糖
Fudgets是一个 Haskell 库。平台:Unix。状态:实验性,但仍保持。一个例子:
import Fudgets
main = fudlogue (shellF "Hello" (labelF "Hello, world!" >+< quitButtonF))
(来源:picamatic.com)
GNUstep 文艺复兴
Renaissance允许用简单的 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>
(来源:picamatic.com)
HTML
基于 HTML 的 GUI (HTML + JS)。跨平台,成熟。可以完全在客户端使用。
寻找一个不错的“helloworld”示例。
(来源:picamatic.com)
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 (+) a b)
(来源:picamatic.com)
蟒蛇卡
PythonCard在 Python 字典中描述 GUI。跨平台(wxWidgets)。一些应用程序使用它,但该项目似乎停滞不前。有一个活跃的分叉。
我跳过PythonCard 示例,因为它对于比赛来说太冗长了。
(来源:picamatic.com)
鞋
鲁比鞋。平台:Win/OSX/GTK+。状态:年轻但活跃。一个最小的应用程序如下所示:
Shoes.app {
@push = button "Push me"
@note = para "Nothing pushed so far"
@push.click {
@note.replace "Aha! Click!"
}
}
(来源:picamatic.com)
Tcl/Tk
Tcl/Tk。跨平台(它自己的小部件集)。成熟(甚至可能过时)和活跃。一个例子:
#!/usr/bin/env wish
button .hello -text "Hello, World!" -command { exit }
pack .hello
tkwait window .
(来源:picamatic.com)
泰克UI
Lua(和 C)的tekUI。平台: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()
(来源:picamatic.com)
树松
Python 的Treethon。它在 YAML 文件中描述 GUI(YAML 树中的 Python)。平台:GTK+。状态:进行中。一个简单的应用程序如下所示:
_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 上下文管理器(with
关键字)来构建 GUI 代码。有关详细信息,请参阅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 + Javascript 可用于创建带有 XULRunner 以及 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>
(来源:picamatic.com)
感谢您的贡献!