Formbuilder

Uno dei compiti più fastidiosi nella creazione di una form è il piazzamento di coppie etichetta/valore in un modo semplice e con un risultato estetico gradevole. In Genropy si utilizza molto spesso uno strumento per posizionare i campi chiamato formbuilder. Il formbuilder crea una tabella html opportunamente costruita e molto pratica per impaginare i campi.


Prendiamo l’esempio visto nella lezione sul datastore e facciamone una versione che utilizza il formbuilder.

Suggerimento

Per un dettaglio sul funzionamento del formbuilder e sui parametri utilizzabili si rimanda alla lezione dedicata nella Widgetpedia

Esaminando il codice vediamo che viene creato un formbuilder:

fb=root.formbuilder(cols=2)

Con questa istruzione ci viene restituito un formbuilder impaginato su 2 colonne al quale andiamo ad aggiungere man mano gli elementi voluti:

fb.input('^parameters.string_to_show',lbl='String To Show',width='100%',colspan=2)
fb.input('^parameters.color',lbl='Color')

Notiamo che all’elemento input passiamo un parametro lbl che non rientrerebbe nei parametri dell’input stesso. Infatti viene rubato dal formbuilder e usato per fare definire l’etichetta da assegnare all’elemento inserito nel formbuilder.

Il formbuilder è in realtà una tabella HTML e quindi possiamo ad esempio usare gli attributi colspan e rowspan.

Avendo usato un formbuilder a 2 colonne otteniamo una disposizione dei campi che rispetta tale scelta.

Vediamo ora lo stesso esempio con un formbuilder a 3 colonne.

Rispetto all’esempio precedente notiamo che al formbuilder passiamo più parametri:

fb=root.formbuilder(cols=3, border_spacing='2px',colswidth='auto',
                         lbl_color='darkgreen',width='500px',fld_width='100%')
  • cambiamo il numero delle colonne,

  • assegniamo una larghezza al formbuilder con l’attributo colswidth=”auto”,

  • chiediamo di autocalcolare le larghezze,

  • inoltre con il prefisso lbl_ assegniamo l’attributo colore a TUTTE le label.

Vediamo che però possiamo ridefinire tale attributo per i campi voluti:

fb.input('^parameters.rounded',lbl='Rounded',lbl_color='darkblue')

Suggerimento

Come regola generale ricorda che spessissimo in Genropy si usa la tecnica di parametri prefissati per indirizzare il valore ad una parte specifica. In questo caso lbl_ significa che parliamo della label. Se volessimo assegnare la larghezza della label potremmo fare lbl_width e via dicendo.

Nel caso del formbuilder possiamo assegnare attributi globali a livello di formbuilder anche al campo con fld_ alla cella del campo con tdf_, alla cella della label con tdl_.