Bitte listen Sie GUI-Programmierbibliotheken, Toolkits und Frameworks auf, die das Schreiben von GUI-Anwendungen ermöglichen schnell . Ich meine so, dass
- Die grafische Benutzeroberfläche wird vollständig in einer für Menschen lesbaren (und für Menschen schreibbaren) Textdatei (Code) beschrieben.
- Der Code ist knapp gehalten (1 oder 2 Zeilen Code pro Widget/Ereignis-Paar) und eignet sich für die Skripterstellung.
- Struktur und Funktionsweise der grafischen Benutzeroberfläche sind aus dem Code ersichtlich (Verschachtelung von Widgets und Ablauf von Ereignissen)
- Details über wie zur Erstellung der grafischen Benutzeroberfläche ausgeblendet werden (Dinge wie die Hauptschleife, das Anhängen von Ereignis-Listenern usw.)
- Auto-Layouts werden unterstützt (vboxes, hboxes, etc.)
Wie die Antworten vermuten lassen, kann dies wie folgt definiert werden deklarativ GUI-Programmierung, ist aber nicht unbedingt eine solche. Jeder Ansatz ist in Ordnung, wenn er funktioniert, einfach zu bedienen ist und kurz ist.
Es gibt einige GUI-Bibliotheken/Toolkits wie diese. Sie sind unten aufgeführt. Bitte erweitern Sie die Liste, wenn Sie ein geeignetes Toolkit vermissen. Geben Sie an, ob es sich um ein plattformübergreifendes, ausgereiftes oder aktives Projekt handelt, und nennen Sie nach Möglichkeit ein Beispiel.
Bitte nutzen Sie dieses Wiki zur Diskussion nur Open Source Projekte.
Dies ist die bisherige Liste (in alphabetischer Reihenfolge):
Fudgets
Fudgets ist eine Haskell-Bibliothek. Plattform: Unix. Status: Experimentell, wird aber noch gepflegt. Ein Beispiel:
import Fudgets
main = fudlogue (shellF "Hello" (labelF "Hello, world!" >+< quitButtonF))
(Quelle: <a href="http://www.picamatic.com/show/2009/01/28/02/40/1883597_93x80.gif" rel="noreferrer">picamatic.de </a>)
GNUstep Renaissance
Renaissance erlaubt es, die GUI in einfachem XML zu beschreiben. Plattformen: OSX/GNUstep. Status: Teil von GNUstep. Ein Beispiel unten:
<window title="Example">
<vbox>
<label font="big">
Click the button below to quit the application
</label>
<button title="Quit" action="terminate:"/>
</vbox>
</window>
(Quelle: <a href="http://www.picamatic.com/show/2009/01/28/03/19/1884098_289x80.png" rel="noreferrer">picamatic.de </a>)
HTML
HTML-basierte GUI (HTML + JS). Plattformübergreifend, ausgereift. Kann vollständig auf der Client-Seite verwendet werden.
Ich suche ein schönes "Helloworld"-Beispiel.
(Quelle: <a href="http://www.picamatic.com/show/2009/01/28/02/44/1883635_264x60.png" rel="noreferrer">picamatic.de </a>)
JavaFX
JavaFX ist sowohl für eigenständige (Desktop-)Anwendungen als auch für Webanwendungen geeignet. Nicht vollständig plattformübergreifend, noch nicht vollständig quelloffen. Status: 1.0 Veröffentlichung. Ein Beispiel:
Frame {
content: Button {
text: "Press Me"
action: operation() {
System.out.println("You pressed me");
}
}
visible: true
}
Ein Screenshot wird benötigt.
Phooey
Phooey ist eine weitere Haskell-Bibliothek. Plattformübergreifend (wxWidgets), HTML+JS Backend geplant. Ausgereift und aktiv. Ein Beispiel (ein wenig mehr als ein 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)
(Quelle: <a href="http://www.picamatic.com/show/2009/01/28/02/33/1883543_236x187.png" rel="noreferrer">picamatic.de </a>)
PythonCard
PythonCard beschreibt GUI in einem Python-Wörterbuch. Plattformübergreifend (wxWidgets). Einige Anwendungen verwenden es, aber das Projekt scheint ins Stocken geraten zu sein. Es gibt eine aktive Abspaltung.
Ich überspringe PythonCard-Beispiel weil sie für den Wettbewerb zu umfangreich ist.
(Quelle: <a href="http://www.picamatic.com/show/2009/01/28/02/46/1883646_199x99.gif" rel="noreferrer">picamatic.de </a>)
Schuhe
Schuhe für Ruby. Plattformen: Win/OSX/GTK+. Status: Jung aber aktiv. Eine minimale Anwendung sieht so aus:
Shoes.app {
@push = button "Push me"
@note = para "Nothing pushed so far"
@push.click {
@note.replace "Aha! Click!"
}
}
(Quelle: <a href="http://www.picamatic.com/show/2009/01/28/03/14/1884011_227x71.png" rel="noreferrer">picamatic.de </a>)
Tcl/Tk
Tcl/Tk . Plattformübergreifend (eigener Widgetsatz). Ausgereift (wahrscheinlich sogar veraltet) und aktiv. Ein Beispiel:
#!/usr/bin/env wish
button .hello -text "Hello, World!" -command { exit }
pack .hello
tkwait window .
(Quelle: <a href="http://www.picamatic.com/show/2009/01/28/02/51/1883672_111x58.png" rel="noreferrer">picamatic.de </a>)
tekUI
tekUI für Lua (und C). Plattformen: X11, DirectFB. Status: Alpha (benutzbar, aber API entwickelt sich noch weiter). Ein Beispiel:
#/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()
(Quelle: <a href="http://www.picamatic.com/show/2009/01/28/03/01/1883821_290x55.png" rel="noreferrer">picamatic.de </a>)
Treethon
Treethon für Python. Es beschreibt die GUI in einer YAML-Datei ( Python in einem YAML-Baum ). Plattform: GTK+. Status: Arbeit in Vorbereitung. Eine einfache Anwendung sieht so aus:
_import: gtk
view: gtk.Window()
add:
- view: gtk.Button('Hello World')
on clicked: print view.get_label()
Noch nicht benannte Python-Bibliothek von Richard Jones:
Dieser ist noch nicht freigegeben. Die Idee ist, Python-Kontext-Manager zu verwenden ( with
Schlüsselwort) zur Strukturierung von GUI-Code. Siehe Richard Jones' Blog für Einzelheiten.
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 kann verwendet werden, um eigenständige Desktop-Anwendungen mit XULRunner sowie Mozilla-Erweiterungen zu erstellen. Ausgereift, Open Source, plattformübergreifend.
<?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>
(Quelle: <a href="http://www.picamatic.com/show/2009/01/28/03/27/1884209_228x108.png" rel="noreferrer">picamatic.de </a>)
Vielen Dank für Ihre Beiträge!