请列出允许快速编写GUI应用程序的GUI编程库、工具包和框架。我的意思是以这样的方式描述GUI,即:
- GUI完全在一个可读(和可写)的纯文本文件(代码)中描述
- 代码简洁(每个小部件/事件对只有1或2行代码),适合脚本编写
- GUI的结构和操作从代码中明显(小部件的嵌套和事件流)
- 有关如何构建GUI的详细信息被隐藏(例如主循环、附加事件侦听器等)
- 支持自动布局(vbox、hbox等)
正如答案所示,这可以被定义为“声明性”GUI编程,但不一定如此。任何方法都可以,只要它有效,易于使用且简洁。
有一些类似这样的GUI库/工具包。它们如下所示。如果您发现符合条件的工具包缺失,请扩展列表。如果可能,请指明该项目是否跨平台、成熟、活跃,并给出一个示例。
请使用此Wiki仅讨论开源项目。
到目前为止,以下是列表(按字母顺序排列):
Fudgets
Fudgets是一个Haskell库。平台:Unix。状态:实验性的,但仍在维护。示例:
import Fudgets
main = fudlogue (shellF "Hello" (labelF "Hello, world!" >+< quitButtonF))
(来源:picamatic.com)
GNUstep Renaissance
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和JS的GUI。跨平台、成熟稳定,可以完全在客户端使用。
寻找一个漂亮的“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
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
PythonCard用Python字典来描述图形界面。跨平台 (wxWidgets)。一些应用程序在使用它,但该项目似乎停滞不前。目前有一个活跃的分支。
我跳过PythonCard示例,因为对于比赛来说太冗长了。
(来源:picamatic.com)
Shoes
Shoes是Ruby的GUI库。平台: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)
tekUI
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)
Treethon
Treethon 是针对 Python 的 GUI 框架。它使用 YAML 文件来描述图形用户界面(Python in a YAML tree)。支持平台: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
尚未命名的Python库,由Richard Jones开发:
这个库还没有发布。其想法是使用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
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)
感谢您的贡献!