请列出GUI编程库,工具包,允许快速编写GUI应用程序的框架。我的意思是这样的,
正如答案所示,这可能被定义为声明性 GUI编程,但并不一定如此。任何方法都可以,如果它有效,易于使用和简洁。
有一些像这样的GUI库/工具包。它们列在下面。如果您发现缺少合格工具包,请扩展列表。指出项目是否是跨平台,成熟,活跃,并在可能的情况下举例说明。
请使用此Wiki讨论仅开源项目。
这是到目前为止的列表(按字母顺序排列):
Fudgets是一个Haskell库。平台:Unix。状态:实验,但仍保持。一个例子:
import Fudgets
main = fudlogue (shellF "Hello" (labelF "Hello, world!" >+< quitButtonF))
(来源:picamatic.com)
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的GUI(HTML + JS)。跨平台,成熟。可以完全在客户端使用。
寻找一个不错的“helloworld”示例。
(来源:picamatic.com)
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 example,因为它对比赛来说过于冗长。
(来源:picamatic.com)
Shoes。平台: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。 Crossplatform(自己的小部件集)。成熟(可能甚至过时)和活跃。一个例子:
#!/usr/bin/env wish
button .hello -text "Hello, World!" -command { exit }
pack .hello
tkwait window .
(来源:picamatic.com)
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。它描述了YAML文件中的GUI( YAML树中的Python )。平台:GTK +。现状:在proress工作。一个简单的应用程序看起来像这样:
_import: gtk
view: gtk.Window()
add:
- view: gtk.Button('Hello World')
on clicked: print view.get_label()
这个尚未发布。我们的想法是使用Python上下文管理器(with
keyword)来构建GUI代码。有关详细信息,请参阅Richard Jones' blog。
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)
感谢您的贡献!
答案 0 :(得分:16)
不要哄骗,而是HTML。
它是跨平台的,并在简单的文本文件中总结了gui-layout。它绝对是成熟的,并且有很好的理解和记录。
有很多方法可以为动态内容模板化HTML文件,还有其他方法可以在不使用尖括号的情况下将自定义语法转换为HTML。
使用Javascript进行客户端脚本编写,使用PHP / Ruby / Python / Perl进行服务器端脚本编写。
它并不适合所有用途,但对很多人来说,它已经足够了。没有必要提供服务 - 如果需要,您可以将HTML文件分发给您的客户 - 请参阅TiddlyWiki,了解可以去哪里的好例子。
答案 1 :(得分:7)
除了鞋之外,你所描述的是声明性编程的新奇概念。我将鞋子更多地描述为GUI Domain-Specifc Language。好吧,我说新的:Visual Basic表单,如果你看看IDE设计师的背后,是声明性的。因此,更进一步的是Oracle的SQL * Forms,尽管用文本编辑器组装它们只是一个非常勇敢的过程。
为了向列表添加另一个,Microsoft有XAML,其中包括为WPF构建的GUI。
虽然提到的一些方案相当简单,但声明性定义的GUI可能与代码中定义的任何内容一样复杂,它们只是更容易和更简洁:它们说“你想要发生什么”并将其留给底层框架来处理“如何”。
答案 2 :(得分:6)
TCL/TK是一种用于交互式构建GUI的脚本语言。它适用于各种平台,包括Unix,Windows和Mac OS X.
答案 3 :(得分:3)
睡衣 - http://pyjs.org - 它是一个桌面小部件集,伪装成基于AJAX的Web 2.0小部件集。它实际上并不像一个Web小部件集,我实际将其移植到桌面 - http://pyjd.org - 使用webkit(adobe AIR中的相同引擎,google chrome,野生动物园等。)
这是“你好世界”:
from pyjamas.ui.RootPanel import RootPanel from pyjamas.ui.Button import Button from pyjamas import Window def greet(fred): Window.alert("Hello, AJAX!") if __name__ == '__main__': b = Button("Click me", greet) RootPanel().add(b)
立即回答五个要求中的前四个。要求5由此实现:
from pyjamas.ui.RootPanel import RootPanel from pyjamas.ui.HorizontalPanel import HorizontalPanel from pyjamas.ui.HTML import HTML p = HorizontalPanel() p.add(HTML("<b>Hello</b>")) p.add(HTML("World")) RootPanel().add(p)
它不会变得更简单。
答案 4 :(得分:2)
XUL(它非常易于使用,功能强大 - 很多Firefox都使用XUL实现GUI结构,+ javascript实现逻辑处理)
XUL tutorial有一些很好的例子。这是tabboxes的一个。页面底部的那个有可切换的标签,按钮,编辑框和组框,而且非常简单(没有Javascript / CSS / XBL /键绑定/等)。然后,他们稍后添加progressively more stuff,这是指定文件长度的很多功能。 (至少在你开始添加javascript来处理有问题的逻辑之前)如果我必须在Win32中做这样的事情,那将是一个真正的痛苦。
答案 5 :(得分:2)
wxLua是Lua的wxWidgets库的包装器。它使用Connect方法将gui小部件事件附加到函数(函数是JS中的第一类)。
答案 6 :(得分:2)
GTK-server使用起来非常简单,可以使用30多种语言,包括Bash和Visual Basic。
答案 7 :(得分:2)
SDL/Swing非常简洁,可读,不引人注目(283k lib,没有依赖关系)并且易于使用。例如:
menus {
"File" {
"Open" do="open" // calls "open()" in the controller
"---"
"Exit" do="exit"
}
}
它的开源但得到Ikayzo.com的商业支持。 .NET和iOS的端口正在进行中。
答案 8 :(得分:1)
我今天刚遇到SDL/Swing。
答案 9 :(得分:-2)
如果你在.NET平台上,你应该看一下XAML