GUI auf deklarative Weise erstellen

Wenn ich über das RAD-Tool (Rapid Application Development) unter Linux/Unix spreche, habe ich früher Tk verwendet, eine ziemlich einfache Bibliothek zum Erstellen grafischer Anwendungen, um einfache GUI-basierte Anwendungen zu erstellen, weil für mich GTK, Qt oder Java sind viel zu kompliziert, um zum Erstellen einfacher GUI-basierter Anwendungen verwendet zu werden. Vielleicht sind sie darauf ausgelegt, komplizierte zu bauen .

Das Kernkonzept von Tk besteht darin, dass GUIs aus Widgets aufgebaut sind – Objekte wie Schaltflächen, Fenster, Bildlaufleisten und Menüs, die zugeordnete Attribute (Größe, Farbe, Beschriftungen usw.) haben. Widgets sind hierarchisch in einem Toplevel-Fenster gruppiert...

Die allgemeine Struktur eines Tcl/Tk-Programms besteht darin, die Benutzerschnittstelle als eine Hierarchie von Widgets mit Unterroutinen zu definieren, die durch Callbacks ausgeführt werden. Widgets werden auf dem Bildschirm angezeigt, wenn Sie einen Geometriemanager bitten, sie zu verwalten, oder wenn Sie den Befehl pack aufrufen (um die Größe des übergeordneten Widgets zu ändern, damit er sie enthält).

-- Tools für die schnelle Anwendungsentwicklung

Der Grund, warum ich oben zitiere, ist, um zu zeigen, wie einfach es ist, solche GUI-basierten Anwendungen von Hand in Tk zu codieren.

Die Schlüsselidee ist, dass Sie die GUI "deklarieren", anstatt sie von Hand zu zeichnen (wie in Visual Basic). Es gibt so viele zeichnungsbasierte GUI-Tools (wie Glade usw.), aber sehr, sehr wenige deklarative. Ich frage mich, was sie sind.

Während ich selbst nach Antworten suchte, fand ich das Folgende die Art von deklarativen GUI-Erstellungstools, nach denen ich suche (obwohl ich nicht weiß, wofür Oz steht). Sie können sehen, wie eine einfache Deklaration verwendet werden kann, um Fenster zu erstellen, untergeordnete Elemente hinzuzufügen und sie auf Benutzereingaben reagieren zu lassen usw.

functor import Application(exit) System(show) GTK define %% Define Toplevel window class class MyToplevel from GTK.window meth new() GTK.window, new(GTK.'WINDOW_TOPLEVEL') GTK.window, setBorderWidth(10) GTK.window, setTitle("Hello, World!") {self signalConnect('delete-event' deleteEvent _)} end meth deleteEvent(Args) %% Do cleanup stuff here {System.show 'deleteEvent occured'} {Application.exit 0} end end %% Define HelloButton class class HelloButton from GTK.button meth new() GTK.button, newWithLabel("Hello, World!") GTK.button, signalConnect('clicked' clickedEvent _) end meth clickedEvent(Args) {System.show 'ClickedEvent occured'} end end %% Create Class Instances Toplevel = {New MyToplevel new()} Button = {New HelloButton new()} %% Make Butten child of Toplevel Container {Toplevel add(Button)} %% Make it all visible {Toplevel showAll()} end

Also noch einmal, was sind die beliebten deklarativen GUI-Erstellungstools da draußen? (Ich interessiere mich eigentlich mehr für diejenigen, die mit Go arbeiten , aber das ist nicht die Einschränkung für diese Frage.)

Danke

Antworten (2)

Es gibt eine Bibliothek namens libui .

libui ist eine einfache und portable (aber nicht unflexible) GUI-Bibliothek in C, die die nativen GUI-Technologien jeder unterstützten Plattform verwendet.

Wenn Sie diese Bibliothek verwenden, schreiben Sie ein GUI-Programm anstelle von "Drag-Drop"-GUI-Komponenten. Ich weiß nicht, was "deklarieren" genau bedeutet. Aber ich gehe davon aus, dass "declare" die Schlüsselwörter des Codes sind, die leicht zu verstehen sind. Diese Bibliothek ist nicht nur für C, sondern auch für Go verfügbar . Hier ist ein einfaches GUI-Programm, das ich dem libui-Tutorial entnommen habe :

package main

import (
    "github.com/andlabs/ui"
)

func main() {
    err := ui.Main(func() {
        name := ui.NewEntry()
        button := ui.NewButton("Greet")
        greeting := ui.NewLabel("")
        box := ui.NewVerticalBox()
        box.Append(ui.NewLabel("Enter your name:"), false)
        box.Append(name, false)
        box.Append(button, false)
        box.Append(greeting, false)
        window := ui.NewWindow("Hello", 200, 100, false)
        window.SetChild(box)
        button.OnClicked(func(*ui.Button) {
            greeting.SetText("Hello, " + name.Text() + "!")
        })
        window.OnClosing(func(*ui.Window) bool {
            ui.Quit()
            return true
        })
        window.Show()
    })
    if err != nil {
        panic(err)
    }
}

Es wird ein GUI-Programm wie dieses erzeugen:

Beispiel-libgui-go-Programm

Das ist bisher die beste Antwort .

Vaadin

Ziehen Sie zum Erstellen der GUI einer Webanwendung in reinem Java das Open-Source-Framework von Vaadin in Betracht.

Vaadin funktioniert genau so, wie Sie es beschreiben, indem es das Layout eines Formulars im Code angibt und jedes Widget (Beschriftungen, Felder, Schaltflächen usw.) hinzufügt. Anschließend fügen Sie Codeblöcke hinzu, die ausgeführt werden, wenn der Benutzer die Widgets zur Laufzeit manipuliert.

Vaadin ähnelt Java Swing, ist aber viel einfacher, besser konstruiert, besser durchdacht und viel praktischer und zuverlässiger.

Suchen Sie hier nach ähnlichen Fragen, wo ich ausführlichere Diskussionen zu Vaadin gepostet habe.

Danke Basil, ich fand es auch "funktioniert auf jedem HTML5-basierten Stack". Das ist ein Plus. Oh, und auch Vaadin Charts (kommerzielle Lizenz). Ich würde sicherlich dieses auswählen, wenn es keine Go-Lösung gegeben hätte. Trotzdem +1.
Wie ist das deklarativ?