[PIPython] Costruzione e recupero dinamici
Massimo Cecconi
massimo.cecconi
Gio 31 Mar 2005 17:52:34 CEST
Si in effetti è proprio quello che mi occorre :) se non fosse altro
però che in un simil modo non così "pythonoso" però :):) ci avevo
provato pure io ed infatti non va perchè mi restituisce questo errore:
'str' object has no attribute 'GetValue'
se uso questo:
for Numeratore in range(0,Slot_To):
MIX_NAME = getattr(parent,'nSLOT_SLOT_'+str(Numeratore).GetValue()
.........
.........
oppure se uso questo:
def getValueFromRow(self, row, name):
return getattr(self,name+str(row).GetValue())
for Numeratore in range(0,Slot_To):
N_SLOT = getValueFromRow(parent,Numeratore,'nSLOT_SLOT_')
MIX_NAME = getValueFromRow(parent,Numeratore,'MISSION_NAME_SLOT_')
JET_NAME = getValueFromRow(parent,Numeratore,'AIRCRAFT_NAME_SLOT_')
...............
...............
quindi come risolvo?? azz sto sclerando!!?? uff....
Quando mi dici:
Come consiglio personale ti conviene esporre molto molto bene il
problema perchè a te che scrivi è evidente ma chi ti legge non avendolo
vissuto, magari fatica a capire.
Hai assolutamente ragione ma è riferito all'altro mio dubbio?? cioè la
creazione del form vero?? oppure a cosa :(
Grazie ancora per la tua santa pazienza :):)
Giovanni Porcari ha scritto:
> Il giorno 31/mar/05, alle 14:46, Massimo Cecconi ha scritto:
>
>> Ciao Giovanni, :)
>>
>> Allora dovrei aver capito il tuo esempio ma non credo che sia quello
>> che serve a me ed ora ti spiego più dettagliatamente quello che devo
>> fare:
>>
>> Ho il mio "form" che ha ben 20 righe e ciascuna di queste righe ha
>> ben 11 elementi che nella fattispecie sono:
>> - 1 TEXT_CTRL
>> - 4 COMBO_BOX
>> - 6 RADIO (in gruppi da due)
>>
>> all'inizio creo un dizionario vuoto in questo modo:
>>
>> parent.Listing = {}
>>
>> poi ad ogni termine di riga aggiungo al dizionario questo:
>>
>> parent.Listing[1] = [parent.nSLOT_SLOT_1, parent.MISSION_NAME_SLOT_1,
>> parent.AIRCRAFT_NAME_SLOT_1, parent.AIRCRAFT_NUMBER_SLOT_1,
>> parent.TYPE_ENTRY_SLOT_1, parent.RADIO_FRA_SI_SLOT_1,
>> parent.RADIO_FRA_NO_SLOT_1, parent.RADIO_114B_SI_SLOT_1,
>> parent.RADIO_114B_NO_SLOT_1, parent.RADIO_LIMA_SI_SLOT_1,
>> parent.RADIO_LIMA_NO_SLOT_1]
>> che in poche parole sono i nomi di tutti gli elementi creati.
>> Alla fine dunque, avrò ben 20 elementi nel dizionario ok??
>
>
> Si. Ok. Ma non ne capisco la ragione.
> Seguimi:
> tu aggiungi a parent un attributo Listing che è un dizionario. Già
> questo a mio avviso non è molto 'logico' perchè un dizionario si usa
> principalmente se devi accedere con una chiave non numerica. Ma nel
> tuo caso basterebbe una lista.
> Poi riempi il dizionario mettendo ad ogni elemento una lista di valori
> che prelevi sempre da parent.
> Cioè ad esempio parent.MISSION_NAME_SLOT_1. Il che significa
> implicitamente che parent ha questi nomi già come attributi. Giusto ?.
> Secondo me creare questo dizionario non serve e ti do appuntamento
> alla parte seguente per vederne la ragione .....
>
>>
>>
>> Quando clicco sul pulsante invio, richiamo la funzione che deve
>> inserire i dati nel database:
>>
>> wx.EVT_BUTTON(parent, ID_BUT_CONFIRM_D, ArchiveSlotProgramDay)
>>
>> nella funzione ArchiveSlotProgramDay ho questo:
>>
>> db_BSS = sqlite.connect('CF_BSS.db')
>> BSS = db_BSS.cursor()
>>
>>
>> Slot_From = 0
>> Slot_To = 20
>>
>> GET_VALUE = parent.Listing
>
>
> Bene ora assegni al tuo dizionario anche il riferimento GET_VALUE.
>
>>
>> while (Slot_From < Slot_To):
>> Numeratore = (Slot_From + 1)
>
>
> ecco qui sarebbe più pythonoso fare:
>
> for Numeratore in range(0,Slot_To):
>
>>
>> ID_Autoincrement = NextNumIdSlot
>> LIST = GET_VALUE[Numeratore]
>
>
> ecco in questo punto ritorni al tuo dizionario e ne prendi l'elemento
> numeratore che è la lista dei valori salvata precedentemente.
>
>>
>> N_SLOT = LIST[0].GetValue()
>
> Qui prendi del primo oggetto il valore...e via dicendo per gli altri.
>
>> MIX_NAME = LIST[1].GetValue()
>> JET_NAME = LIST[2].GetValue()
>> JET_NUMBER = LIST[3].GetValue()
>> ENTRY_SLOT = LIST[4].GetValue()
>> FRA_SI = LIST[5].GetValue()
>> FRA_NO = LIST[6].GetValue()
>> B114_SI = LIST[7].GetValue()
>> B114_NO = LIST[8].GetValue()
>> LIMA_SI = LIST[9].GetValue()
>> LIMA_NO = LIST[10].GetValue()
>>
>
> Ora, in realtà, senza stare nemmeno a creare il dizionario, puoi avere
> subito il valore.
>
> for Numeratore in range(0,Slot_To):
> MIX_NAME =
> getattr(parent,'nSLOT_SLOT_'+str(Numeratore).GetValue()
> JET_NAME =
> getattr(parent,'MISSION_NAME_SLOT_'+str(Numeratore).GetValue()
> JET_NUMBER =
> getattr(parent,'AIRCRAFT_NAME_SLOT_'+str(Numeratore).GetValue()
> .............
> ..............
> LIMA_NO =
> getattr(parent,'RADIO_LIMA_NO_SLOT_'+str(Numeratore).GetValue()
>
> Con questo dovresti accedere tranquillamente. In pratica con la
> getattr hai la referenza dell'oggetto wx a partire dalla riga e dal
> nome e con GetValue ne prendi il valore.
>
> Se vuoi essere più elegante.........:
> Potresti, per eleganza, aggiungere all'oggetto una function
> getRowNamedValue
>
> def getValueFromRow (self,row,name)
> return getattr(self,name+str(row).GetValue()
>
> in tal modo il tuo codice diventa:
>
> for Numeratore in range(0,Slot_To):
> MIX_NAME = parent.getValueFromRow(Numeratore,'nSLOT_SLOT_')
> JET_NAME =
> parent.getValueFromRow(Numeratore,'MISSION_NAME_SLOT_')
> JET_NUMBER =
> parent.getValueFromRow(Numeratore,'AIRCRAFT_NAME_SLOT_')
> .............
> ..............
> LIMA_NO =parent.getValueFromRow(Numeratore,'RADIO_LIMA_NO_SLOT_')
>
> che è più elegante da vedere.
>
>>
>> e così recupero il valore di ognuno degli elementi che avevo nel form
>> di partenza.
>>
>> Ora dimmi se forse (come probabile), non ho capito io il tuo esempio
>> quindi come mi hai detto tu fa la stessa cosa e se è più performante
>> in termine di memoria, quindi in prestazioni.
>>
>> Se invece quello che vorrei io lo posso fare solo nel modo in cui
>> l'ho fatto già, oppure c'è un metodo migliore e più performante??
>>
>> Inoltre quando creo il form sono costretto a scrivere il codice per
>> intero oppure c'è un modo per fare si che le varie righe le posso
>> creare dinamicamente?? sinceramente ho incontrato problemi. Adesso
>> poi a parte che ci impiega circa due o tre secondi nella creazione, a
>> volte lo crea a scatti, da cosa può dipendere?? posso avere dei
>> problemi in futuro??
>> Ciao e grazie ancora.... yuk!
>
>
> Spero ti sia di aiuto. Come consiglio personale ti conviene esporre
> molto molto bene il problema perchè a te che scrivi è evidente ma chi
> ti legge non avendolo vissuto, magari fatica a capire.
>
> Ciao
> G.
>
> _______________________________________________
> La mailing list di python.it
> python a lists.python.it
> http://lists.python.it/cgi-bin/mailman/listinfo/python
>
>
More information about the Python
mailing list