Очень простые, лаконичные и легкие «каркасы» программирования с графическим интерфейсом

Перечислите библиотеки программирования графического интерфейса, наборы инструментов и фреймворки, которые позволяют быстро писать приложения с графическим интерфейсом. Я имею в виду таким образом, что

  • GUI полностью описан в виде простого текстового файла (кода), который может быть прочитан человеком (и доступен для записи человеком).
  • код краток (1 или 2 строки кода на пару виджет/событие), подходит для сценариев
  • структура и работа графического интерфейса очевидна из кода (вложенность виджетов и поток событий)
  • сведения о том, как создать графический интерфейс, скрыты (например, основной цикл, присоединение прослушивателей событий и т. д.)
  • поддерживаются автоматические макеты (vboxes, hboxes и т. д.)

Как показывают ответы, это может быть определено как декларативное программирование с графическим интерфейсом, но это не обязательно так. Любой подход хорош, если он работает, прост в использовании и лаконичен.

Есть несколько библиотек/инструментов с графическим интерфейсом, подобных этому. Они перечислены ниже. Пожалуйста, дополните список, если вы обнаружите, что отсутствует соответствующий инструментарий. Укажите, является ли проект кроссплатформенным, зрелым, активным, и, если возможно, приведите пример.

Пожалуйста, используйте эту вики для обсуждения только проектов с открытым исходным кодом.

Это список на данный момент (в алфавитном порядке):

Фаджеты

Fudgets — это библиотека Haskell. Платформа: Юникс. Статус: Экспериментальный, но все еще поддерживается. Пример:

  import Fudgets
  main = fudlogue (shellF "Hello" (labelF "Hello, world!" >+< quitButtonF))

Пример скриншота Fudgets
(источник: 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».

Пример HTML GUI
(источник: 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)

Пример снимка экрана Phooey
(источник: picamatic.com)

PythonКарта

PythonCard описывает графический интерфейс в словаре Python. Кроссплатформенность (wxWidgets). Некоторые приложения используют его, но проект, похоже, застопорился. Есть активная вилка.

Я пропускаю пример PythonCard, поскольку он слишком многословен для конкурса.< /эм>

Пример скриншота 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 .

Пример скриншота Tcl/Tk
(источник: 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()

скриншот tekUI helloworld
(источник: 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>

Пример приветствия XUL
(источник: picamatic.com)


Спасибо за вклад!


person Community    schedule 22.01.2009    source источник
comment
Может получиться хорошая вики сообщества.   -  person Wayne Koorts    schedule 26.01.2009
comment
Хорошо, я переиздал это как Community Wiki. Но я надеюсь, что в нем не будут упоминаться инструменты, не относящиеся к Open Source.   -  person sastanin    schedule 26.01.2009
comment
Не могли бы вы добавить скриншоты результата.   -  person OscarRyz    schedule 26.01.2009
comment
По некоторым ссылкам уже есть скриншоты. Однако большинство этих библиотек используют кросс-платформенные (или непосредственно нативные) низкоуровневые инструменты. Поэтому они имеют более-менее родной вид в любом месте. Tk, Fudgets и JavaFX разные.   -  person sastanin    schedule 28.01.2009
comment
Ок, добавил скрины. Также переписал вопрос как страницу вики.   -  person sastanin    schedule 28.01.2009


Ответы (10)


Не в шутку, а в HTML.

Он кроссплатформенный и суммирует макет графического интерфейса в простом текстовом файле. Он определенно зрелый, а также хорошо понятый и хорошо задокументированный.

Существует множество способов шаблонизации файлов HTML для динамического содержимого и других способов преобразования пользовательских синтаксисов в HTML, если вам не нравятся угловые скобки.

Скрипты на стороне клиента с Javascript, сценарии на стороне сервера с PHP/Ruby/Python/Perl.

Он не подходит для всех целей, но для многих он достаточно хорош. Нет никаких причин, по которым его нужно обслуживать — вы можете распространять HTML-файл среди своих клиентов, если хотите — см. TiddlyWiki для хорошего примера того, куда это может пойти.

person rampion    schedule 22.01.2009
comment
С веб-приложениями все в порядке, но их общая сложность выше из-за неизбежного взаимодействия клиент-сервер. Кроме того, количество строк кода на «событие» выше даже в последних веб- и js-фреймворках. И если приложение не полностью управляется пользовательскими запросами, все становится сложнее. - person sastanin; 23.01.2009
comment
Я думаю, что HTML — отличный способ сделать графический интерфейс. Вы можете сделать его простым или достаточно сложным. Я думал сделать это сам для файлового диалога и, вероятно, скоро это сделаю. - person Rocketmagnet; 23.01.2009
comment
Ваш пример с TiddlyWiki убедил меня в том, что он подходит исключительно для графических интерфейсов на стороне клиента. - person sastanin; 23.01.2009
comment
Я добавил ссылку на tiddlywiki.com - person jfs; 26.01.2009
comment
HTML ... Недостаточно для тяжелых инструментов, подобных САПР, которые обрабатывают структуры данных размером в диапазоне ГБ. Мысли? - person Ninad; 13.09.2011

То, что вы описываете, является, за исключением обуви, новомодным понятием декларативного программирования. Я бы назвал обувь скорее графическим интерфейсом язык домена. Ну, я говорю новомодное: формы Visual Basic, если смотреть за конструктором IDE, были декларативными. Итак, вернемся еще дальше, к SQL*Forms от Oracle, хотя сборка их с помощью текстового редактора была процессом, под силу только самым смелым.

Чтобы добавить еще один в список, у Microsoft есть XAML, который, среди прочего, вещей, описывает GUI, созданные для WPF.

Хотя некоторые из упомянутых схем довольно просты, декларативно определенные графические интерфейсы могут быть такими же сложными, как и все, что определено в коде, они просто проще и лаконичнее: они говорят, «что» вы хотите, и оставляют это базовой структуре для обработки. "как".

person Mike Woodhouse    schedule 22.01.2009
comment
Это хороший ответ, чтобы указать, что все примеры относятся к предметно-ориентированным языкам. Хотя я просил конкретные примеры свободы как свободы. - person sastanin; 23.01.2009
comment
Утверждение о том, что «декларативно определенные графические интерфейсы могут быть такими же сложными, как и все, что определено в коде, просто они проще и лаконичнее», на мой взгляд, очень верно. - person sastanin; 23.01.2009
comment
Означает ли это, что у Shoes лучшая архитектура среди остальных? - person Ninad; 13.09.2011
comment
@Ninad Я не знаю о лучшей обуви (которую лучше рассматривать в ее зеленых туфлях) который поддерживается и находится в постоянном развитии) может быть сложно уговорить в более сложные, похожие на формы структуры. Но это, вероятно, верно для большинства простых фреймворков. Я думаю, что это просто вопрос поиска того, что лучше всего работает для человека. - person Mike Woodhouse; 13.09.2011

TCL/TK — это скриптовый язык, используемый для интерактивного создания графического интерфейса. Он доступен на различных платформах, включая Unix, Windows и Mac OS X.

person mouviciel    schedule 22.01.2009
comment
Я знаю о Тк. Это действительно кратко. Но одна вещь, которая заставляет меня избегать этого, заключается в том, что приложения Tk все еще выглядят такими же «уродливыми» на моем компьютере с Linux, как и несколько лет назад. Я не про другой набор виджетов, а про шрифты. Думал, наверное, проблема не в самом Тк, а в моем дистрибутиве… - person sastanin; 23.01.2009
comment
Собственные темы плитки снова заставляют Tcl/Tk выглядеть красиво. Есть даже темы, которые делают его похожим на Gtk или Qt wiki.tcl.tk/11075 - person Daniel Lopez; 25.01.2009
comment
Я думаю, что этот ответ заслуживает более высокого голоса, но я больше не могу его проголосовать... - person sastanin; 30.01.2009
comment
Проблема со шрифтами была решена в последних версиях Tk, которые теперь поддерживают шрифты со сглаживанием. Лично меня больше заботит функциональность и производительность инструментария пользовательского интерфейса, чем красивые шрифты, и в этом отношении Tk практически не имеет себе равных. - person Bryan Oakley; 10.03.2009

Пижамы – http://pyjs.org — это набор виджетов для рабочего стола, замаскированный под набор виджетов Web 2.0 на основе AJAX. он настолько НЕ похож на набор веб-виджетов, что я фактически перенес его на рабочий стол — http://pyjd.org — с использованием webkit (тот же движок в Adobe AIR, google chrome, safari и т. д.)

это "привет мир":

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)

проще некуда.

person Community    schedule 08.04.2009
comment
Это очень интересно. Я должен взглянуть на это. Спасибо! - person sastanin; 12.04.2009

XUL (довольно простой в использовании и мощный — большая часть Firefox реализована с использованием XUL для структуры графического интерфейса + javascript для обработки логики)

В руководстве по XUL есть несколько хороших примеров. Вот один для вкладки. Тот, что внизу страницы, имеет переключаемые вкладки, кнопки, поля редактирования и групповые поля, и он довольно прост (без Javascript/CSS/XBL/привязки клавиш/и т. д.). Затем они добавляют последовательно больше материалы позже, что является большим количеством функций для длины файла, который его указывает. (по крайней мере, пока вы не начнете добавлять javascript для обработки рассматриваемой логики). Если бы мне пришлось сделать что-то подобное в Win32, это было бы настоящей болью.

person Jason S    schedule 22.01.2009
comment
Я не видел простых в использовании примеров использования XUL за пределами Mozilla. При просмотре его учебника создается впечатление, что он слишком XML-подобный и слишком многословный, чтобы его можно было использовать для быстрой и простой разработки графического интерфейса. Буду признателен, если вы докажете обратное. - person sastanin; 23.01.2009
comment
Я думаю, мне не с чем сравнивать, кроме различных инструментов win32, которые я использовал, и графического интерфейса MATLAB; с этой точки зрения я нашел XUL очень простым. Вероятно, вам лучше всего взглянуть на одно из расширений Firefox, которое его использует. (дай мне найти один ...) - person Jason S; 23.01.2009
comment
я имею в виду вот этот пример... ibm.com/developerworks/web/library /wa-xul1 - person Jason S; 23.01.2009
comment
Ваши примеры с вкладками и расширениями FF убедительны. Я рассмотрю это. - person sastanin; 23.01.2009
comment
Я также нашел руководство по созданию стандартных приложений с помощью XULRunner: developer.mozilla.org/en/Getting_started_with_XULRunner. - person sastanin; 23.01.2009
comment
Да, я забыл упомянуть XULRunner. :) Думаю, это важно. Я никогда не пробовал, я всегда использовал Firefox для запуска моего XUL (с тем недостатком, что если ваша программа дает сбой, она отключает браузер :/) - person Jason S; 23.01.2009

wxLua — это оболочка библиотеки wxWidgets для Lua. Он использует метод Connect для присоединения событий виджета графического интерфейса к функциям (функции первого класса, как в JS).

person Community    schedule 26.01.2009

GTK-server чрезвычайно прост в использовании и может работать с более чем 30 языками, включая Bash и Visual. Базовый.

person Community    schedule 17.03.2009
comment
Интересный проект! Я никогда не думал о доступе к реальному API через интерфейсы unixy — мой опыт работы с графическими интерфейсами, управляемыми из командной строки, в основном ограничивался kdialog. Интересно, можно ли это обобщить для работы с любым API. - person ; 17.03.2009
comment
Это, конечно, очень интересно. Это кажется хорошим для GUI, управляемого скриптами, но не выглядит «кратким». Спасибо! - person sastanin; 18.03.2009
comment
Как это может быть короче: gtk-server.org/demo- stdin.py.txt ? И просто чтобы уточнить, gtk-server работает и в Windows, что открывает такие возможности, как запуск графического интерфейса в Windows, но логика в Linux, но я отвлекся... - person Jakob Eriksson; 25.03.2009
comment
Вы также можете сказать GTK. Если я что-то не понимаю, это просто динамически обработанный код C из строк. Это кажется более сложным, чем эквивалентный код C; это не то, что я бы назвал идеальной структурой графического интерфейса. - person mbauman; 30.05.2010

SDL/Swing чрезвычайно лаконичен, удобочитаем, ненавязчив (283k lib без зависимостей ) и проста в использовании. Пример:

menus {
    "File" {
        "Open" do="open" // calls "open()" in the controller
        "---"
        "Exit" do="exit"
    }
}

Его исходный код с открытым исходным кодом, но он пользуется коммерческой поддержкой Ikayzo.com. Портирование для .NET и iOS находится в стадии разработки.

person Community    schedule 08.06.2010

Сегодня я случайно наткнулся на SDL/Swing.

person Community    schedule 26.05.2010
comment
Похоже на интересный предметно-ориентированный язык. Просто примечание для тех, кто не переходит по ссылкам: здесь SDL не для Simple Directmedia Layer. - person sastanin; 26.05.2010

Вам следует взглянуть на XAML, если вы работаете на платформе .NET.

person Community    schedule 26.01.2009
comment
Это не бесплатно (с открытым исходным кодом). И хотя для Mono существует компилятор XAML (developer.novell.com/wiki/index .php/Xaml_compiler_for_mono), я не уверен, совместим ли он на 100% или останется таковым. - person sastanin; 28.01.2009