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!

16voto

rampion Punkte 84270

Nicht zum Spaß, aber HTML.

Es ist plattformübergreifend und fasst das GUI-Layout in einer einfachen Textdatei zusammen. Es ist definitiv ausgereift, sowie gut verstanden und gut dokumentiert.

Es gibt eine Reihe von Möglichkeiten, HTML-Dateien für dynamische Inhalte zu erstellen, und andere Möglichkeiten, benutzerdefinierte Syntaxen in HTML zu konvertieren, wenn Sie spitze Klammern nicht mögen.

Client-seitiges Scripting mit Javascript, Server-seitiges Scripting mit PHP/Ruby/Python/Perl.

Es ist nicht für alle Zwecke geeignet, aber für viele ist es gut genug. Es gibt auch keinen Grund dafür, dass es serviert werden muss - Sie können eine HTML-Datei an Ihre Kunden weitergeben, wenn Sie wollen - siehe TiddlyWiki ist ein gutes Beispiel dafür, wohin das führen kann.

7voto

Mike Woodhouse Punkte 50241

Was Sie beschreiben, ist, mit Ausnahme von Schuhen, der neumodische Begriff der deklarativen Programmierung. Ich würde Schuhe eher als eine grafische Benutzeroberfläche beschreiben. Domänenspezifische Sprache . Nun, ich sage neumodisch: Visual Basic-Formulare waren, wenn man hinter den IDE-Designer blickte, deklarativ. Noch weiter zurück liegen die SQL*Forms von Oracle, auch wenn deren Zusammenstellung mit einem Texteditor nur für die ganz Mutigen zu bewältigen war.

Um der Liste ein weiteres Beispiel hinzuzufügen, hat Microsoft XAML in dem unter anderem GUIs beschrieben werden, die für das WPF .

Obwohl einige der erwähnten Schemata recht einfach sind, können deklarativ definierte GUIs genauso komplex sein wie alles, was in Code definiert ist, sie sind nur einfacher und übersichtlicher: Sie sagen, "was" man will, und überlassen es dem zugrunde liegenden Framework, das "wie" zu handhaben.

6voto

mouviciel Punkte 64583

TCL/TK ist eine Skriptsprache, die für die interaktive Erstellung von GUI verwendet wird. Sie ist auf verschiedenen Plattformen verfügbar, darunter Unix, Windows und Mac OS X.

3voto

Pyjamas - http://pyjs.org - Es ist ein Desktop-Widget-Set, getarnt als AJAX-basiertes Web-2.0-Widget-Set. Es ist so sehr NICHT wie ein Web-Widget-Set, dass ich es tatsächlich portiert habe zu der Schreibtisch - http://pyjd.org - Verwendung von Webkit (die gleiche Engine in Adobe AIR, Google Chrome, Safari usw.)

dies ist "Hallo Welt":

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)

Damit sind die ersten vier von fünf Anforderungen sofort erfüllt. Anforderung 5 ist damit erfüllt:

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)

Einfacher geht's nicht.

2voto

Jason S Punkte 178087

XUL (es ist ziemlich einfach zu bedienen, und mächtig - viel von Firefox ist mit XUL für GUI-Struktur implementiert, + Javascript für Logik Handhabung)

Le site XUL-Tutorial hat einige gute Beispiele. Hier ist eines für Tab-Felder . Die Seite unten hat umschaltbare Registerkarten, Schaltflächen, Bearbeitungsfelder und Gruppenfelder und ist recht einfach (kein Javascript/CSS/XBL/Tastenbindungen/etc.). Sie fügen dann hinzu schrittweise mehr Sachen später, was für die Länge der Datei, die es spezifiziert, eine Menge an Funktionalität ist. (zumindest bis Sie beginnen, Javascript hinzufügen, um die Logik in Frage zu behandeln) Wenn ich so etwas in Win32 tun musste, wäre es ein echter Schmerz.

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