Перечислите библиотеки программирования графического интерфейса, наборы инструментов и фреймворки, которые позволяют быстро писать приложения с графическим интерфейсом. Я имею в виду таким образом, что
- GUI полностью описан в виде простого текстового файла (кода), который может быть прочитан человеком (и доступен для записи человеком).
- код краток (1 или 2 строки кода на пару виджет/событие), подходит для сценариев
- структура и работа графического интерфейса очевидна из кода (вложенность виджетов и поток событий)
- сведения о том, как создать графический интерфейс, скрыты (например, основной цикл, присоединение прослушивателей событий и т. д.)
- поддерживаются автоматические макеты (vboxes, hboxes и т. д.)
Как показывают ответы, это может быть определено как декларативное программирование с графическим интерфейсом, но это не обязательно так. Любой подход хорош, если он работает, прост в использовании и лаконичен.
Есть несколько библиотек/инструментов с графическим интерфейсом, подобных этому. Они перечислены ниже. Пожалуйста, дополните список, если вы обнаружите, что отсутствует соответствующий инструментарий. Укажите, является ли проект кроссплатформенным, зрелым, активным, и, если возможно, приведите пример.
Пожалуйста, используйте эту вики для обсуждения только проектов с открытым исходным кодом.
Это список на данный момент (в алфавитном порядке):
Фаджеты
Fudgets — это библиотека Haskell. Платформа: Юникс. Статус: Экспериментальный, но все еще поддерживается. Пример:
import Fudgets
main = fudlogue (shellF "Hello" (labelF "Hello, world!" >+< quitButtonF))
(источник: picamatic.com)
GNUstep Ренессанс
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>
(источник: picamatic.com)
HTML
Графический интерфейс на основе HTML (HTML + JS). Кроссплатформенный, зрелый. Может использоваться полностью на стороне клиента.
Ищем хороший пример «helloworld».
(источник: picamatic.com)
JavaFX
JavaFX можно использовать как для автономных (настольных), так и для веб-приложений. Не полностью кроссплатформенный, еще не полностью открытый исходный код. Статус: Версия 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)
PythonКарта
PythonCard описывает графический интерфейс в словаре Python. Кроссплатформенность (wxWidgets). Некоторые приложения используют его, но проект, похоже, застопорился. Есть активная вилка.
Я пропускаю пример PythonCard, поскольку он слишком многословен для конкурса.< /эм>
(источник: picamatic.com)
Обувь
Обувь для Ruby. Платформы: 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
tekUI для Lua (и C). Платформы: X11, DirectFB. Статус: Альфа (можно использовать, но 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 для Python. Он описывает GUI в файле YAML (Python в дереве YAML). Платформа: GTK+. Статус: работа в процессе. Простое приложение выглядит так:
_import: gtk
view: gtk.Window()
add:
- view: gtk.Button('Hello World')
on clicked: print view.get_label()
http://treethon.googlecode.com/svn/trunk/treethon_gtk_tutorial/base.png
Пока безымянная библиотека Python Ричарда Джонса:
Этот еще не выпущен. Идея состоит в том, чтобы использовать менеджеры контекста Python (ключевое слово with
) для структурирования кода графического интерфейса. Подробнее см. в блоге Ричарда Джонса.
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)
Спасибо за вклад!