.. _tutor/pagina/formbuilder: 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. .. raw:: html
Prendiamo l'esempio visto nella lezione sul :ref:`datastore` e facciamone una versione che utilizza il formbuilder. .. raw:: html
Esempio con formbuilder
.. hint:: 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. .. raw:: html 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') .. hint :: 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_``.