), Я не уверен, что он на 100% совместим или останется таковым.

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

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

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

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

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

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

Fudgets

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

  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 GUI (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

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 описывает GUI в словаре Python. Кроссплатформенность (wxWidgets). Некоторые приложения используют его, но проект кажется остановленным. Есть активный форк.

Я пропускаюПример PythonCard потому что это слишком многословно для конкурса.


(источник:picamatic.com)

обувь

обувь для руби. Платформы: 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 для Луа (и С). Платформы: 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

Treethon для Python. Описывает графический интерфейс в файле YAML (Питон в дереве YAML). Платформа: 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 Ричарда Джонса:

Этот еще не выпущен. Идея состоит в том, чтобы использовать контекстные менеджеры Python (with Ключевое слово) для структурирования кода 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>


(источник:picamatic.com)

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

 sastanin26 янв. 2009 г., 18:06
Хорошо, я переиздал это как Сообщество Wiki. Но я надеюсь, что это не будет упоминать инструменты не с открытым исходным кодом.
 Wayne Koorts26 янв. 2009 г., 02:06
Может стать хорошим сообществом Wiki.
 sastanin28 янв. 2009 г., 13:47
ОК, я добавил скриншоты. Также переписал вопрос в виде вики-страницы.
 OscarRyz26 янв. 2009 г., 20:30
Не могли бы вы добавить скриншоты результата.
 sastanin28 янв. 2009 г., 11:12
У некоторых ссылок уже есть скриншоты. Однако большинство этих библиотек используют кроссплатформенные (или непосредственно нативные) низкоуровневые наборы инструментов. Таким образом, они выглядят более или менее в любом месте. Tk, Fudgets и JavaFX разные.

Ответы на вопрос(9)

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

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

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

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

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

 Jason S23 янв. 2009 г., 00:03
я имею в виду этот пример ...ibm.com/developerworks/web/library/wa-xul1
 sastanin23 янв. 2009 г., 09:25
Ваши примеры с вкладками и расширениями FF убедительны. Я рассмотрю это.
 Jason S23 янв. 2009 г., 00:02
Думаю, мне не с чем сравнивать, кроме различных инструментов win32, которые я использовал, и GUI MATLAB; с этой точки зрения я нашел XUL очень простым. Вероятно, вам лучше всего взглянуть на одно из расширений Firefox, которое его использует. (дай мне найти ...)
 sastanin23 янв. 2009 г., 09:32
Я также нашел учебное пособие по созданию приложений с XULRunner:developer.mozilla.org/en/Getting_started_with_XULRunner
 sastanin22 янв. 2009 г., 22:44
Я не видел никаких простых в использовании примеров использования XUL за пределами Mozilla. Просмотр его Учебного пособия создает впечатление, что он слишком XMLish и слишком многословен, чтобы использовать его для быстрой и простой разработки GUI. Буду признателен, если вы сможете доказать обратное.

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

 Bryan Oakley10 мар. 2009 г., 16:35
Проблема со шрифтами была решена в последних версиях Tk, которые теперь поддерживают сглаженные шрифты. Лично меня больше беспокоит функциональность и производительность в наборе инструментов пользовательского интерфейса, а не красивые шрифты, и в этом отношении Tk практически не имеет аналогов.
 Daniel Lopez24 янв. 2009 г., 23:59
Темы Tile / Tk снова выглядят красиво. Есть даже темы, чтобы он выглядел как Gtk или Qtwiki.tcl.tk/11075
 sastanin22 янв. 2009 г., 22:50
Я знаю о Тк. Это действительно кратко. Но одна вещь, которая заставляет меня избегать этого, заключается в том, что Tk-приложения все еще выглядят так же «некрасиво» на моем компьютере с Linux, как и несколько лет назад. Я говорю не о другом наборе виджетов, а о шрифтах. Подумал, наверное, это не проблема самого Tk, а моего дистрибутива…
 sastanin30 янв. 2009 г., 11:09
Я думаю, что этот ответ заслуживает более высокого голосования, но я не могу больше его голосовать ...

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

 Matt B.30 мая 2010 г., 07:44
Вы можете также сказать GTK. Если я что-то не так понимаю, это просто динамически обрабатываемый C-код из строк. Это кажется более сложным, чем эквивалентный код C; это не то, что я бы назвал идеальной структурой GUI.
 sastanin18 мар. 2009 г., 17:35
Это конечно очень интересно. Кажется, это хорошо для GUI, управляемого сценариями, но это не выглядит «кратко». Спасибо!
 Iraimbilanja17 мар. 2009 г., 15:59
Интересный проект! Я никогда не думал о доступе к реальному API через unixy-интерфейсы - мой опыт работы с GUI на основе командной строки был в основном ограничен kdialog. Интересно, можно ли это обобщить для работы с любым API.
 Jakob Eriksson25 мар. 2009 г., 12:43
Как это может быть гораздо более кратким, чем это:gtk-server.org/demo-stdin.py.txt ? И чтобы уточнить, gtk-сервер работает и в Windows, что открывает такие возможности, как запуск графического интерфейса в Windows, но логика в Linux, но я отвлекся ...

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

SDL / Swing сегодня.

 sastanin26 мая 2010 г., 16:11
Выглядит как интересный предметно-ориентированный язык. Просто примечание для тех, кто не следует по ссылкам: SDL здесь не для простого уровня Directmedia.

http://pyjs.org - это набор виджетов для рабочего стола, замаскированный под набор виджетов Web 2.0 на основе AJAX. это так сильно НЕ как набор веб-виджетов, что я на самом деле портировал егов рабочий стол -http://pyjd.org - Использование веб-набора (тот же движок в 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)

это не могло быть немного проще.

 sastanin12 апр. 2009 г., 17:35
Это очень интересно Я должен взглянуть на это. Спасибо!

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

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

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

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

 Ninad13 сент. 2011 г., 10:02
HTML ... Недостаточно для тяжелых CAD-подобных инструментов, которые обрабатывают структуры данных размером в диапазоне ГБ. Мысли?
 sastanin22 янв. 2009 г., 22:38
Веб-приложения в порядке, но общая сложность выше из-за неизбежного взаимодействия клиент-сервер. Кроме того, число строк кода на «событие» выше даже с последними web и js фреймворками. И если приложение не полностью управляется пользовательским запросом, все становится сложнее.
 sastanin23 янв. 2009 г., 10:19
Ваш пример с TiddlyWiki убедил меня, что он подходит для чисто клиентских графических интерфейсов.
 jfs26 янв. 2009 г., 01:52
Я добавил ссылку наtiddlywiki.com
 Rocketmagnet23 янв. 2009 г., 00:24
Я думаю, что HTML - отличный способ сделать GUI. Вы можете сделать это простым или довольно сложным. Я решил сделать это самостоятельно для файлового диалога, и, вероятно, скоро.

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

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

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

 sastanin22 янв. 2009 г., 22:52
На мой взгляд, утверждение о том, что «декларативно определяемые графические интерфейсы могут быть такими же сложными, как и все, что определено в коде, они просто и проще», совершенно верно.
 Mike Woodhouse13 сент. 2011 г., 11:15
@Ninad Я не знаю о "лучше" - обувь (которая может быть лучше смотреть в еезеленые туфли Воплощение, которое поддерживается и находится в постоянном развитии) может быть сложным, чтобы уговорить в более сложные, подобные форме структуры. Но это, вероятно, верно для большинства "простых" фреймворков. Я думаю, что это просто вопрос поиска того, что лучше всего подходит для человека.
 sastanin22 янв. 2009 г., 22:29
Это хороший ответ, чтобы указать, что все примеры относятся к предметно-ориентированным языкам. Тем не менее, я просил конкретные примеры «как свободен».
 Ninad13 сент. 2011 г., 10:07
Означает ли это, что обувь имеет лучшую архитектуру среди остальных?

Ваш ответ на вопрос