Zeer eenvoudige, beknopte en gemakkelijke GUI-programmering “frameworks”

Geef een lijst van GUI-programmeerbibliotheken, toolkits, frameworks waarmee GUI-apps snelkunnen worden geschreven. Ik bedoel op zo’n manier, dat

  • GUI wordt volledig beschreven in een door mensen leesbaar (en door mensen beschrijfbaar) tekstbestand (code)
  • code is beknopt (1 of 2 regels code per widget/gebeurtenispaar), geschikt voor scripting
  • structuur en werking van de GUI blijkt uit de code (nesting van widgets en stroom van gebeurtenissen)
  • details over hoede GUI te bouwen zijn verborgen (dingen zoals mainloop, het koppelen van gebeurtenislisteners, enz.)
  • automatische lay-outs worden ondersteund (vboxes, hboxes, etc.)

Zoals de antwoorden suggereren, kan dit worden gedefinieerd als declaratieveGUI-programmering, maar het is niet noodzakelijkerwijs zo. Elke aanpak is OK als het werkt, gemakkelijk te gebruiken en beknopt is.

Er zijn enkele GUI-bibliotheken/toolkits zoals deze. Ze staan ​​hieronder vermeld. Breid de lijst uit als u een kwalificerende toolkit ziet ontbreken. Geef aan of het project platformonafhankelijk, volwassen en actief is en geef indien mogelijk een voorbeeld.

Gebruik deze wiki om alleen Open Source-projecten te bespreken.

Dit is de lijst tot nu toe (in alfabetische volgorde):

Fudgets

Fudgetsis een Haskell-bibliotheek. Platform: Unix. Status: Experimenteel, maar nog steeds onderhouden. Een voorbeeld:

 import Fudgets
  main = fudlogue (shellF "Hello" (labelF "Hello, world!" >+< quitButtonF))

Fudgets voorbeeld screenshot
(bron: picamatic.com)

GNUstep Renaissance

Renaissancemaakt het mogelijk om de GUI in eenvoudige XML te beschrijven. Platformen: OSX/GNUstep. Status: onderdeel van GNUstep. Een voorbeeld hieronder:

<window title="Example">
  <vbox>
    <label font="big">
      Click the button below to quit the application
    </label>
    <button title="Quit" action="terminate:"/>
  </vbox>
</window> 

Renaissance voorbeeld screenshot
(bron: picamatic.com)

HTML

HTML-gebaseerde GUI (HTML + JS). Crossplatform, volwassen. Kan volledig aan de clientzijde worden gebruikt.

Op zoek naar een leuk “helloworld” voorbeeld.

HTML GUI-voorbeeld
(bron: picamatic.com)

JavaFX

JavaFXis zowel bruikbaar voor stand-alone (desktop) apps als voor internet toepassingen. Niet volledig crossplatform, nog niet volledig open source. Status: versie 1.0. Een voorbeeld:

 Frame {
    content: Button {
      text: "Press Me"
      action: operation() {
         System.out.println("You pressed me");
      }
    }
    visible: true
  }

Screenshot is nodig.

Phoey

Phooeyis een andere Haskell-bibliotheek. Crossplatform (wxWidgets), HTML+JS-backend gepland. Volwassen en actief. Een voorbeeld (iets meer dan een 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 voorbeeld screenshot
(bron: picamatic.com)

PythonCard

PythonCardbeschrijft GUI in een Python-woordenboek. Cross-platform (wxWidgets). Sommige apps gebruiken het, maar het project lijkt vastgelopen. Er is een actieve vork.

Ik sla PythonCard-voorbeeldover omdat het te uitgebreid is voor de wedstrijd.

PythonCard voorbeeld screenshot
(bron: picamatic.com)

Schoenen

Schoenenvoor Ruby. Platformen: Win/OSX/GTK+. Status: Jong maar actief. Een minimale app ziet er als volgt uit:

 Shoes.app {
     @push = button "Push me"
     @note = para "Nothing pushed so far"
     @push.click {
        @note.replace "Aha! Click!"
     }
  }

Schoenen voorbeeld screenshot
(bron: picamatic.com)

Tcl/Tk

Tcl/Tk. Crossplatform (een eigen widgetset). Volwassen (waarschijnlijk zelfs gedateerd) en actief. Een voorbeeld:

 #!/usr/bin/env wish
  button .hello -text "Hello, World!" -command { exit }
  pack .hello
  tkwait window .

Tcl/Tk voorbeeld screenshot
(bron: picamatic.com)

tekUI

tekUIvoor Lua (en C). Platformen: X11, DirectFB. Status: Alfa (bruikbaar, maar API evolueert nog steeds). Een voorbeeld:

 #/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
(bron: picamatic.com)

Treethon

Treethonvoor Python. Het beschrijft GUI in een YAML-bestand (Python in een YAML-boom). Platform: GTK+. Status: werk in uitvoering. Een eenvoudige app ziet er als volgt uit:

 _import: gtk
  view: gtk.Window()
  add:
      - view: gtk.Button('Hello World')
        on clicked: print view.get_label()

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

Toch naamloze Python-bibliotheek door Richard Jones:

Deze is nog niet vrijgegeven. Het idee is om Python-contextmanagers (withtrefwoord) te gebruiken om GUI-code te structureren. Zie Richard Jones’ blogvoor details.

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 kan worden gebruikt om stand-alone desktop-apps met XULRunner te maken, evenals Mozilla-extensies. Volwassen, open source, platformonafhankelijk.

 <?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 voorbeeld
(bron: picamatic.com)


Bedankt voor uw bijdragen!


Antwoord 1, autoriteit 100%

Niet voor de gek, maar HTML.

Het is platformonafhankelijk en vat de gui-lay-out samen in een eenvoudig tekstbestand. Het is zeker volwassen, maar ook goed begrepen en goed gedocumenteerd.

Er zijn tal van manieren om HTML-bestanden te sjablonen voor dynamische inhoud, en andere manieren om aangepaste syntaxis naar HTML te converteren als u niet van haakjes houdt.

Client-side scripting met Javascript, server-side scripting met PHP/Ruby/Python/Perl.

Het is niet voor alle doeleinden geschikt, maar voor velen is het goed genoeg. Er is ook geen reden waarom het moet worden aangeboden – u kunt een HTML-bestand naar uw klanten distribueren als u dat wilt – zie TiddlyWikivoor een goed voorbeeld van waar dat kan gaan.


Antwoord 2, autoriteit 44%

Wat je beschrijft is, met uitzondering van schoenen, het nieuwerwetse begrip declaratief programmeren. Ik zou schoenen meer omschrijven als een GUI Domeinspecifieke taal. Nou, ik zeg nieuwbakken: Visual Basic-formulieren, als je achter de IDE-ontwerper keek, waren declaratief. Dus, nog verder teruggaand, waren Oracle’s SQL*Forms, hoewel het samenstellen ervan met een teksteditor een proces was dat alleen door de allermoedigsten moest worden ondernomen.

Om nog een aan de lijst toe te voegen, heeft Microsoft XAMLdie , beschrijft onder andere GUI’s die zijn gebouwd voor de WPF.

Hoewel sommige van de genoemde schema’s vrij eenvoudig zijn, kunnen declaratief gedefinieerde GUI’s net zo complex zijn als alles wat in code is gedefinieerd, ze zijn gewoon eenvoudiger en beknopter: ze zeggen “wat” je wilt dat er gebeurt en laten het over aan de onderliggende raamwerk om het “hoe” af te handelen.


Antwoord 3, autoriteit 38%

TCL/TKis een scripttaal die wordt gebruikt voor het interactief bouwen van GUI. Het is beschikbaar op verschillende platforms, waaronder Unix, Windows en Mac OS X.


Antwoord 4, autoriteit 19%

Pyjama – http ://pyjs.org– het is een desktopwidgetset, vermomd als een op AJAX gebaseerde web 2.0-widgetset. het is zo NIET zoals een webwidgetset dat ik het eigenlijk naarde desktop heb geporteerd – http://pyjd.org– met webkit (dezelfde engine in Adobe AIR, Google Chrome, Safari, enz.)

dit is “hallo wereld”:

van pyjamas.ui.RootPanel import RootPanel
van pyjamas.ui.Button import Button
van pyjama import Venster
def groet(fred):
  Window.alert ("Hallo, AJAX!")
if __name__ == '__main__':
  b = Button ("Klik mij", groet)
  RootPanel().add(b)

die meteen voldoet aan de eerste vier van de vijf vereisten. Hiermee wordt aan eis 5 voldaan:

van pyjamas.ui.RootPanel import RootPanel
van pyjamas.ui.HorizontalPanel import HorizontalPanel
van pyjamas.ui.HTML import HTML
p = Horizontaal Paneel()
p.add(HTML("<b>Hallo</b>")) 
P.ADD (HTML ("World"))
Rootpanel (). Toevoegen (P)

Het kon niet eenvoudiger krijgen.


5, Autoriteit 12%

wxlua is een wikkel van de WXWidgets-bibliotheek voor Lua. Het gebruikt een Connect-methode om GUI Widget-evenementen toe te voegen aan functies (functies zijn eerste klasse zoals in JS).


6, Autoriteit 12%

GTK-server is extreem eenvoudig te gebruiken en kan worden gebruikt uit meer dan 30 talen, waaronder Bash en visuele basis.


7, Autoriteit 6%

i Juat kwam SDL / Swing vandaag nog.


8

U moet XAML bekijken als u zich op het .NET-platform bevindt

Other episodes