Пожалуйста, перечислите библиотеки программирования GUI, инструментарий, рамки, которые позволяют быстро писать графические приложения. Я имею в виду таким образом, что
- GUI описывается полностью в текстовом файле (код), читаемом человеком (и для человека)
- код является кратким (1 или 2 строки кода на пару виджета/события), подходит для сценариев
- Структура и работа графического интерфейса очевидна из кода (вложение виджетов и потока событий)
- информация о том, как создать графический интерфейс, скрыта (например, mainloop, добавление прослушивателей событий и т.д.).
- поддерживаются автоматические макеты (vbox, hbox и т.д.).
Как показывают ответы, это может быть определено как декларативное программирование графического интерфейса, но это не обязательно так. Любой подход в порядке, если он работает, прост в использовании и кратким.
Есть некоторые библиотеки GUI/инструментальные средства, подобные этому. Они перечислены ниже. Просьба распространить этот список, если отсутствует квалифицированный инструментарий. Укажите, является ли проект кроссплатформенным, зрелым, активным и приведите пример, если это возможно.
Пожалуйста, используйте эту вики, чтобы обсудить только проекты с открытым исходным кодом.
Это список до сих пор (в алфавитном порядке):
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 Renaissance
Renaissance позволяет описать GUI в простом XML. Платформы: 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>
Пример скриншота Renaissance http://www.picamatic.com/show/2009/01/28/03/19/1884098_289x80.png
HTML
HTML-ориентированный графический интерфейс (HTML + JS). Кроссплатформенность, зрелая. Может использоваться полностью на стороне клиента.
Ищем хороший пример "helloworld".
JavaFX
JavaFX можно использовать для автономных (настольных) приложений, а также для веб-приложений. Не полностью кроссплатформенный, еще не полностью открытый источник. Статус: выпуск 1.0. Пример:
Frame {
content: Button {
text: "Press Me"
action: operation() {
System.out.println("You pressed me");
}
}
visible: true
}
Необходим скриншот.
Phooey
Phooey - еще одна библиотека Haskell. Crossplatform (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)
Пример скриншота Phooey http://www.picamatic.com/show/2009/01/28/02/33/1883543_236x187.png
PythonCard
PythonCard описывает графический интерфейс в словаре Python. Кроссплатформенность (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. Crossplatform (собственный набор виджета). Зрелый (возможно, даже датированный) и активный. Пример:
#!/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 screenshot http://www.picamatic.com/show/2009/01/28/03/01/1883821_290x55.png
Treethon
Treethon для Python. Он описывает GUI в файле YAML (Python в дереве YAML). Платформа: GTK+. Статус: работа в proress. Простое приложение выглядит следующим образом:
_import: gtk
view: gtk.Window()
add:
- view: gtk.Button('Hello World')
on clicked: print view.get_label()
Еще неназванная библиотека Python Ричарда Джонса:
Этот еще не выпущен. Идея состоит в том, чтобы использовать контекстные менеджеры Python (with
keyword) для структурирования GUI-кода. Подробнее см. блог Ричарда Джонса.
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>
Пример XUL helloworld http://www.picamatic.com/show/2009/01/28/03/27/1884209_228x108.png
Спасибо за вклад!