61 Stimmen

Sehr einfache, knappe und leichte GUI-Programmierung "Frameworks"

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

Fudgets example screenshot
(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> 

Renaissance example screenshot
(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.

HTML GUI example
(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)

Phooey example screenshot
(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.

PythonCard example screenshot
(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!"
     }
  }

Shoes example screenshot
(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 .

Tcl/Tk example screenshot
(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()

tekUI helloworld screenshot
(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()

Screenshot von Treethon helloworld http://treethon.googlecode.com/svn/trunk/treethon_gtk_tutorial/base.png

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>

XUL helloworld example
(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!

2voto

Nick Van Brunt Punkte 14922

wxLua ist ein Wrapper der wxWidgets-Bibliothek für Lua. Sie verwendet eine Connect-Methode, um GUI-Widget-Ereignisse an Funktionen anzuhängen (Funktionen sind erste Klasse wie in JS).

2voto

Jakob Eriksson Punkte 33

GTK-Server ist extrem einfach zu bedienen und kann in mehr als 30 Sprachen, darunter Bash und Visual Basic, verwendet werden.

2voto

Daniel Leuck Punkte 21

SDL/Schwingen ist extrem knapp, lesbar, unaufdringlich (283k lib ohne Abhängigkeiten) und einfach zu benutzen. Beispiel:

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

Es ist Open Source, genießt aber kommerzielle Unterstützung von Ikayzo.com. Portierungen für .NET und iOS sind in Arbeit.

1voto

Digikata Punkte 1746

Ich bin gerade auf SDL/Schwingen heute.

-2voto

Rad Punkte 8279

Sie sollten einen Blick auf XAML werfen, wenn Sie auf der .NET-Plattform arbeiten

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X