it-swarm.com.ru

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

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

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

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

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

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

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

Fudgets

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

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

Fudgets example screenshot
(источник: 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> 

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

HTML

Основанный на HTML GUI (HTML + JS). Кроссплатформенный, зрелый. Может использоваться полностью на стороне клиента.

Ищем хороший пример "helloworld".

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

JavaFX

JavaFX можно использовать как для автономных (настольных) приложений, так и для веб-приложений. Не полностью кроссплатформенный, еще не полностью открытый исходный код. Статус: 1.0 релиз. Пример:

  Frame {
    content: Button {
      text: "Press Me"
      action: operation() {
         System.out.println("You pressed me");
      }
    }
    visible: true
  }

Скриншот необходим.

Phooey

Фуи это еще одна библиотека на Хаскеле. Кроссплатформенность (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 example screenshot
(источник: picamatic.com )

PythonCard

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

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

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

Обувь

Обувь для Руби. Платформы: Win/OSX/GTK +. Статус: молодой, но активный. Минимальное приложение выглядит так:

  Shoes.app {
     @Push = button "Push me"
     @note = para "Nothing pushed so far"
     @Push.click {
        @note.replace "Aha! Click!"
     }
  }

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

Tcl/Tk

Tcl/Tk . Кроссплатформенность (собственный набор виджетов). Зрелый (возможно, даже от) и активный. Пример:

  #!/usr/bin/env wish
  button .hello -text "Hello, World!" -command { exit }
  pack .hello
  tkwait window .

Tcl/Tk example screenshot
(источник: 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 screenshot
(источник: picamatic.com )

Treethon

Treethon для Python. Он описывает GUI в файле YAML ( Python в дереве 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>

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


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

60
sastanin

Не шутить, а HTML.

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

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

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

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

16
rampion

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

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

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

7
Mike Woodhouse

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

6
mouviciel

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

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

 из pyjamas.ui.RootPanel импорт RootPanel 
 из pyjamas.ui.Button Кнопка импорта 
 из окна импорта пижам [
 
 def greet (fred) : 
 Window.alert ("Привет, AJAX!") 
 
 If __== '__main __': 
 B = Кнопка ("Нажми меня", приветствуй ) 
 RootPanel (). Add (b) 

это сразу отвечает первым четырем из пяти требований. Требование 5 выполняется этим:

[.__ = HorizontalPanel () 
 P.add (HTML ("<b> Hello </ b>")) 
 P.add (HTML ("World")) 
 RootPanel ( ) .add (р) 

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

3
lkcl

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

2
Nick Van Brunt

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

2
Jakob Eriksson

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

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

2
Jason S

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

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

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

2
Daniel Leuck

Я только что сталкивался SDL/Swing сегодня.

1
Digikata