Очень простое, краткое и легкое программирование GUI "рамки"

Пожалуйста, перечислите библиотеки программирования 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".

Пример графического интерфейса HTML http://www.picamatic.com/show/2009/01/28/02/44/1883635_264x60.png

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

Снимок экрана Treethon helloworld http://treethon.googlecode.com/svn/trunk/treethon_gtk_tutorial/base.png

Еще неназванная библиотека 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


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

Ответ 1

Не для ребенка, а для HTML.

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

Пижама - http://pyjs.org - it набор виджета рабочего стола, замаскированный под виджеты 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)

он не может быть проще.

Ответ 5

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

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

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

Ответ 9

Сегодня я встретил SDL/Swing.

Ответ 10

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