“Framework” de programmation graphique très simple, concise et facile

Veuillez répertorier les bibliothèques de programmation GUI, les kits d’outils et les frameworks qui permettent d’écrire rapidement des applications GUI. Je veux dire de cette façon, que

  • L’interface graphique est entièrement décrite dans un fichier en texte brut (code) lisible par l’homme (et accessible en écriture)
  • le code est laconique (1 ou 2 lignes de code par widget / paire d’événements), adapté au script
  • la structure et le fonctionnement de l’interface graphique sont évidents à partir du code (imbrication de widgets et stream d’événements)
  • les détails sur la façon de créer l’interface graphique sont masqués (choses comme le mainloop, les écouteurs d’événements, etc.)
  • les mises en page automatiques sont sockets en charge (vbox, hboxes, etc.)

Comme les réponses le suggèrent, cela peut être défini comme une programmation GUI déclarative , mais ce n’est pas nécessairement le cas. Toute approche est acceptable si elle fonctionne, est facile à utiliser et concise.

Il existe des bibliothèques / toolkits d’interface graphique comme celui-ci. Ils sont listés ci-dessous. Veuillez étendre la liste si vous voyez une boîte à outils qualifiante manquante. Indiquez si le projet est cross-plateforme, mature, actif et donnez un exemple si possible.

Veuillez utiliser ce wiki pour discuter uniquement des projets Open Source .

Voici la liste jusqu’à présent (par ordre alphabétique):

Fudgets

Fudgets est une bibliothèque Haskell. Plate-forme: Unix. Statut: expérimental, mais toujours maintenu. Un exemple:

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

Fudgets example screenshot http://soffr.miximages.com/scripting/1883597_93x80.gif

GNUstep Renaissance

Renaissance permet de décrire l’interface graphique en XML simple. Plateformes: OSX / GNUstep. Statut: partie de GNUstep. Un exemple ci-dessous:

    

Exemple de capture d’écran de Renaissance http://soffr.miximages.com/scripting/1884098_289x80.png

HTML

Interface graphique basée sur HTML (HTML + JS). Crossplatform, mature. Peut être utilisé entièrement du côté du client.

Vous cherchez un bel exemple de «helloworld».

Exemple d’interface graphique HTML: http://soffr.miximages.com/scripting/1883635_264x60.png

JavaFX

JavaFX est utilisable pour les applications autonomes (de bureau) ainsi que pour les applications Web. Pas complètement crossplatform, pas encore complètement open source. Statut: version 1.0. Un exemple:

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

Une capture d’écran est nécessaire

Phooey

Phooey est une autre bibliothèque de Haskell. Crossplatform (wxWidgets), backend HTML + JS prévu. Mature et actif. Un exemple (un peu plus qu’un 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 (+) ab) 

Phooey exemple capture d’écran http://soffr.miximages.com/scripting/1883543_236x187.png

PythonCard

PythonCard décrit l’interface graphique dans un dictionnaire Python. Plateforme croisée (wxWidgets). Certaines applications l’utilisent, mais le projet semble bloqué. Il y a une fourchette active.

Je saute l’ exemple de PythonCard car il est trop verbeux pour le concours.

Exemple de PythonCard screenshot http://soffr.miximages.com/scripting/1883646_199x99.gif

Chaussures

Chaussures pour Ruby. Plateformes: Win / OSX / GTK +. Statut: Jeune mais actif. Une application minimale ressemble à ceci:

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

Exemple de chaussures capture d’écran http://soffr.miximages.com/scripting/1884011_227x71.png

Tcl / Tk

Tcl / Tk . Crossplatform (son propre ensemble de widgets). Mature (probablement même daté) et actif. Un exemple:

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

Exemple d’écran Tcl / Tk http://soffr.miximages.com/scripting/1883672_111x58.png

tekUI

tekUI pour Lua (et C). Plateformes: X11, DirectFB. Statut: Alpha (utilisable, mais l’API évolue toujours). Un exemple:

  #/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 capture d’écran http://soffr.miximages.com/scripting/1883821_290x55.png

Treethon

Treethon pour Python. Il décrit l’interface graphique dans un fichier YAML ( Python dans un arbre YAML ). Plate-forme: GTK +. Statut: travail en cours. Une application simple ressemble à ceci:

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

Treethon helloworld capture d’écran http://treethon.googlecode.com/svn/trunk/treethon_gtk_tutorial/base.png

Pourtant, la bibliothèque Python non nommée par Richard Jones:

Celui-ci n’est pas encore sorti. L’idée est d’utiliser les gestionnaires de contexte Python ( with mot clé) pour structurer le code GUI. Voir le blog de Richard Jones pour plus de détails.

 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 peut être utilisé pour créer des applications de bureau autonomes avec XULRunner ainsi que des extensions Mozilla. Maturité, open source, plateforme croisée.

       

XUL helloworld example http://soffr.miximages.com/scripting/1884209_228x108.png


Merci pour vos consortingbutions!

Pas pour enfant, mais HTML.

C’est multi-plateforme, et résume la présentation graphique dans un simple fichier texte. C’est définitivement mature, bien compris et bien documenté.

Il existe de nombreuses façons de modéliser des fichiers HTML pour obtenir du contenu dynamic, ainsi que d’autres moyens de convertir des syntaxes personnalisées en HTML si vous n’aimez pas les crochets.

Scripting côté client avec Javascript, scripting côté serveur avec PHP / Ruby / Python / Perl.

Ce n’est pas bien adapté à toutes les fins, mais pour beaucoup, c’est assez bon. Il n’y a aucune raison de le servir non plus – vous pouvez dissortingbuer un fichier HTML à vos clients si vous le souhaitez – voir TiddlyWiki pour un bon exemple de ce que cela peut donner.

Ce que vous décrivez, à l’exception des chaussures, c’est la notion nouvelle de programmation déclarative. Je décrirais les chaussures davantage comme un langage de domaine spécifique à une interface graphique. Eh bien, je dis new-fangled: les formulaires Visual Basic, si vous regardiez derrière le concepteur IDE, étaient déclaratifs. Donc, plus loin encore, se trouvaient les SQL * Forms d’Oracle, bien que leur assemblage avec un éditeur de texte soit un processus que seuls les plus courageux pouvaient entreprendre.

Pour append un autre à la liste, Microsoft a XAML qui, entre autres choses, décrit les interfaces graphiques créées pour le WPF .

Bien que certains des schémas mentionnés soient assez simples, les interfaces graphiques définies de manière déclarative peuvent être aussi complexes que tout ce qui est défini dans le code, elles sont simplement plus faciles et plus rapides: elles permettent de gérer le cadre sous-jacent le “comment”

TCL / TK est un langage de script utilisé pour créer une interface graphique de manière interactive. Il est disponible sur différentes plates-formes, notamment Unix, Windows et Mac OS X.

Pyjamas – http://pyjs.org – c’est un ensemble de widgets de bureau, déguisé en un ensemble de widget Web 2.0 basé sur AJAX. c’est tellement pas comme un jeu de widget web que je l’ai porté sur le bureau – http://pyjd.org – en utilisant webkit (le même moteur dans Adobe AIR, Google Chrome, Safari, etc.)

c’est “bonjour le monde”:

 à partir de pyjamas.ui.RootPanel importation RootPanel
 à partir du bouton pyjamas.ui.Button import
 de pyjamas import fenêtre

 def greet (fred):
     Window.alert ("Bonjour, AJAX!")

 si __name__ == '__main__':
     b = Bouton ("Cliquez moi", salue)
     RootPanel (). Add (b)

cela répond immédiatement aux quatre premières exigences sur cinq. l’exigence 5 est remplie par ceci:

 à partir de pyjamas.ui.RootPanel importation RootPanel
 à partir de pyjamas.ui.HorizontalPanel import HorizontalPanel
 à partir de pyjamas.ui.HTML import HTML

 p = HorizontalPanel ()
 p.add (HTML (" Bonjour "))
 p.add (HTML ("Monde"))
 RootPanel (). Add (p)

ça ne pouvait pas être plus simple.

XUL (c’est assez facile à utiliser et puissant – une grande partie de Firefox est implémentée en utilisant XUL pour la structure de l’interface graphique, + javascript pour la gestion de la logique)

Le tutoriel XUL a quelques bons exemples. En voici un pour les tabboxes . Celui au bas de la page comporte des tabs, des boutons, des zones d’édition et des zones de groupe commutables, et c’est assez simple (pas de liaison Javascript / CSS / XBL / / etc). Ils ajoutent ensuite de plus en plus de choses plus tard, ce qui représente beaucoup de fonctionnalités pour la longueur du fichier qui le spécifie. (au moins jusqu’à ce que vous commenciez à append du javascript pour gérer la logique en question) Si je devais faire quelque chose comme ça dans Win32, ce serait très difficile.

wxLua est une enveloppe de la bibliothèque wxWidgets pour Lua. Il utilise une méthode Connect pour attacher des événements de widget d’interface graphique à des fonctions (les fonctions sont de première classe comme dans JS).

GTK-server est extrêmement simple à utiliser et peut être utilisé dans plus de 30 langues, y compris Bash et Visual Basic.

SDL / Swing est extrêmement concis, lisible, discret (283k lib sans dépendances) et facile à utiliser. Exemple:

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

Son open source mais bénéficie du support commercial de Ikayzo.com. Les ports pour .NET et iOS sont en cours.

Je suis tombé sur SDL / Swing aujourd’hui.

Vous devriez jeter un oeil à XAML si vous êtes sur la plate-forme .NET