2008-12-12 21 views
7

Voglio entrare nella programmazione di alcune applicazioni GUI serie, ma quando guardo cose come Swing/SWT da Java, non posso fare a meno di HATE programmare un'interfaccia GUI creando "widget "oggetti e popolarli e chiamare metodi su di loro.GUI basata su markup per python

Penso che la progettazione GUI dovrebbe essere eseguita in un file separato basato su testo in un formato di markup, che viene letto e reso (ad esempio HTML), in modo che il design dell'interfaccia non sia strettamente accoppiato con il resto del codice .

Ho visto HTMLayout e mi piace l'idea, ma finora sembra essere solo in C++.

Sto cercando una libreria Python (o anche un progetto WIP) per fare gui basati su markup.

UPDATE

Il motivo per cui non posso accettare l'xml di QT è la stessa ragione Odio l'approccio programmatico; stai assemblando ciascun widget separatamente e specificando ciascuna proprietà di esso su una riga separata. Non offre alcun vantaggio nel farlo in modo programmatico.

risposta

7

Puoi provare XUL di Mozilla.Supporta Python tramite XPCOM.

Vedi questo progetto: pyxpcomext

XUL non è compilato, è confezionato e caricato in fase di esecuzione. Firefox e molte altre grandi applicazioni lo usano, ma la maggior parte di essi usa Javascript per lo scripting al posto di Python. Ci sono uno o 2 usando Python però.

3

Si dovrebbe guardare in Qt, che può essere utilizzato da Python utilizzando l'ottima interfaccia PyQt (perché non hanno ne ha più ne QtPy --- cutiepie, ottenere è? --- Non capirò mai).

Con Qt, è possibile scegliere di costruire la GUI in modo programmatico (che non si desidera) o utilizzare il markup XML. Questo file XML può essere compilato in anticipo sul codice o caricato con un comando breve. Quest'ultimo è il modo normale di lavorare usando PyQt.

Qt è versatile, di alta qualità, multipiattaforma e probabilmente lo si sta già utilizzando senza saperlo. L'applicazione client Skype ufficiale è scritta in Qt se non ricordo male.

Edit: Solo l'aggiunta di alcuni link in modo che il PO ottenere ottenere una certa sensazione di esso ...

+0

Sono stato esposto a Qt prima, anche se non approfondito affatto, sarebbe di grande aiuto se aggiungessi un collegamento a qualcosa relativo alla cosa-markup xml :) – hasen

+0

Io uso QT/PyQT al lavoro e amo usare loro. Tieni presente che mentre stai imparando, sono entrambi gratuiti come nella licenza open source GPL, ma non appena inizi a vendere il tuo lavoro devi acquistare licenze per sviluppatori commerciali uno per sviluppatore. –

+0

Il markup XML è il formato dei file .ui utilizzati. Questi possono probabilmente essere scritti a mano, oppure puoi usare il Designer Qt per crearli. – gnud

-2

finestre?

è possibile utilizzare l'editor WinForms in Visual Studio e quindi parlare all'assembly di IronPython.

+0

Downvoted perché è per Windows? Non capisco +1 all'offset. – orip

+0

Downvote perché "parlare all'assembly" non equivale a "UI basata su markup", inoltre, anche se viene sostenuto correttamente che è/è/basato sul markup, albiet con una "libreria di assemblaggio" specifica per Windows-IDE di fantasia, soffre gli stessi problemi che l'OP ha con QT. – Arafangion

+0

L'editor di winforms produce codice. Codice particolarmente brutto in alcuni casi. Inoltre, IronPython è un'implementazione del linguaggio Python in cima al runtime .NET. Ciò significa che perdi molti moduli CPython. –

2

Che ne dici di wxPython? Sto solo ora iniziando a lavorarci, ma c'è uno strumento - XRC Resource Editor - che ti permette di assemblare la tua GUI, che viene poi scritta in un file XML. A quanto ho capito, la tua applicazione Python carica il file XML, piuttosto che avere un intero gruppo di codice di layout GUI mescolato con il tuo codice Python.

+0

+1. Probabilmente l'opzione migliore per Python. Preferisco questo approccio a quello che ho suggerito. Una guida ai file di risorse XML: http://wiki.wxpython.org/UsingXmlResources –

1

Se si utilizza GTK, è possibile utilizzare Glade, che è un file XML.

0

Come programmatore della GUI che ha acquisito un po 'di esperienza , è probabile che tu debba semplicemente lanciare il tuo dolce e piccolo toolkit per automatizzare le attività che ti ritrovi a dover ripetere.

2

Se si sceglie un linguaggio come Tcl o Python e Tk per lo sviluppo dell'applicazione, diventa piuttosto semplice scrivere il proprio DSL per descrivere l'interfaccia. È possibile, ad esempio, scrivere un DSL che consente di creare i menu in questo modo:

menubar { 
    File => { 
     Open => cmd.open 
     Save => cmd.save 
     Exit => cmd.exit 
    } 
    Edit => { 
     Cut => cmd.cut 
     Copy => cmd.copy 
     Paste => cmd.paste 
    } 
} 

... e le vostre forme GUI principali in questo modo:

form PropertiesForm { 
      Font: [fontchooser] 
    Foreground: [foregroundChooser] 
    Background: [backgroundChooser] 
} 
form NewUserForm { 
    username [_____________________] 
    [] administrator 
    enable the following features: 
    () feature 1 
    () feature 2 
    () feature 3 
} 
notebook { 
    Properties => PropertiesForm 
    New User => NewUserForm 
} 

... e così via. Tcl eccelle davvero nel farti scrivere DSL come questo. Si noti che questa funzionalità non è incorporata in Tcl di per sé, ma il linguaggio rende banali i DSL. Alcuni di questo tipo di cose esistono nella wiki di Tcler, ad esempio c'è il codice per creare menu simili a quello che ho descritto allo Menus Made Easy.

Penso, però, che dopo un po 'di tempo sarà davvero difficile realizzare interfacce utente di livello professionale in questo modo.

Problemi correlati