Eccomi qua, finite le ultime cure al "ContabFam", ho ripreso a studiare Python e devo dire che sono riuscito ad andare avanti: infatti ho potuto aggiungere l'aspetto grafico al mio primo programma Python. Lo stato delle arti presenta ad oggi questa situazione:
1) Ho costruito un modulo a riga di comando in grado di prendere in input alcuni dati ed a registrare un file .txt coi dati registrati.
2) periodo di natalizio = periodo di p-a-u-s-a a base di pasti abbondanti con contorno di dolciumi :D
3) ho costruito la mia prima Finestra (Form in Gambas) dove ho posizionato una bellissima barra-dei-menù per le successive scelte operative.
4) Ho tentato, ma ancora senza successo di aggiungere una nuova classe corredata di relativa finestra per gestire quello che attualmente funziona solo da riga di comando, in modo da sfruttare così la funzione di intercettazione degli eventi, attraverso la GUI di Tkinter di Python.
A questo stadio del lavoro, il programma è incorso in una condizione di anomalia che non capisco come risolvere. Mi permetto di riportare qui appresso uno scorcio di codice nella speranza di intercettare un 'evento di tipo "maggiore esperienza pythoniana" per aiutarmi a rialzarmi: ;)
All'interno della classe "Fmain" di avvio del programma, fra le istruzioni di definizione delle righe di selezione del menù a tendina "giocatori", si riscontrano quelle relative alla riga di selezione "Inserimento"
def __init__(self, quadro_avvio):
#---------------- omesse righe contenenti estranee al problema -------
mGiocatori = Menu(barraMenu, tearoff=0) barraMenu.add_cascade(label="Giocatori",
menu=mGiocatori, font = ("arial", 11))
mIns_giocatori = Menu(mGiocatori, tearoff=0)
mGiocatori.add_command(label="Inserimento", command=lambda : self.ins_giocatori)
L'ultima di esse dovrebbe avviare la funzione ins_giocatori, definita correttamente più sopra, nel programma:
def ins_giocatori():
print "ramo inserimento giocatori in lavorazione"
fIns_giocatori=Tk()
fIns_giocatori.title="Sezione INSERIMENTO GIOCATORI"
giocInser=fInsGiocatori(fIns_giocatori)
fIns_giocatori.mainloop()
print "------ fine lavoro ------"
Come prima ed ultima riga del gruppo di istruzioni, ho inserito una "Print" per capire attraverso la relativa stampa sul terminale shell su cui si appoggia Python che la funzione venga eseguita. Ebbene le print non vengono eseguite, quindi, devo pensare, che la funzione non venga eseguita. Non viene segnalato alcun errore ed il programma è sempre attivo, per cui posso continuare a giocare col click del mouse sulle etichette presenti nella barra-dei-menù.
L'unica seleziona che funziona è quella relativa al Menù: File->Esci
mFile = Menu(barraMenu, tearoff=0)
barraMenu.add_cascade(label="File", menu=mFile, font = ("arial", 11) )
mFile.add_command(label="Esci", command=root.quit)
Il comando "quit" contenuto nell'ultima riga viene eseguito correttamente, infatti il programma si chiude e la finestra con la barra-dei-menù scompare.
Qualcuno potrebbe dirmi perchè la funzione ins_giocatori non viene eseguita?
Ho cercato fra le casistiche persenti sul Web un esempio di programmazione simile a quello scritto da me, ma non l'ho ancora trovato.
:(
Ogni linguaggio diventa una corsa ad ostacoli, o forse sarebbe meglio dire "una co...lla ad ostacoli" :hatecomputer:; si perchè oltre le naturali difficoltà del linguaggio che già frenano di suo, specialmente per un neofita, si frappongono anche le mancanze di compatibilità degli strumenti disponibili coi SO. ospiti.
Detto così sembra uno sfogo, ma in realtà i giorni trascorrono infruttuosi ed il sistema nervoso va sempre più su di giri >:(.
Visto che il mio primo programma Python dovrà girare sia su Linux.Ubuntu che su Windopws, ho pensato di creare i file.txt, riservati al trattamento dei dati relativi, in una directory, figlio della directory User Home, rilevando il percorso di quest'ultima con la seguente funzione Python:
dir_base = os.getenv('HOME')
In Ubuntu: Nessun problema.
In Windows7 la variabile dir_base viene valorizzata con None, cioè "NULL". Dopo di chè, il programma va in errore. Sono tre giorni che mi accanisco su questo ... problema, senza riuscre a cavarne un ragno dal buco.
La differenza con qualsiasi ambiente Linux è che in Windows manca il login dell'utente correntemente attivo. Ciò probabilmente manda a pallino la funzione "os.getenv". Sarebbe quantomeno accettabile sapere quali directory sono presenti in "C:\", in modo da potere costruire successivamente il percorso corretto.
Chi mi può aiutare?
:ciao: