tkinter e le classi di python

mancato avvio di una classe di python da un menu di tkinter

« Older   Newer »
 
  Share  
.
  1. pieranpy
     
    .

    User deleted


    Questo mio primo post č essenzailmente una presentazione, alla quale accedo con un vassoio carico di un piccolo problema che ho riscontrato nell'inserimento dell'ambiente grafico nel mio primo programma in python.
    La mia esperienza in programmazione č cominciata quando i pc non erano ancora stati inventati ed esistevano solo gli elaboratori con 32 KB di ram, elaboratore che occupavano , assieme alle periferiche spazi enormi. Con l'avvento dei pc desktop, il mio interesse per il mondo della programmazione č aumentato ed ho conosciuto, per uso personale, il Basic, poi il Visual Basic ed infine, quando, sei anni fa, ho installato il primo SO. Linux, ho imparato ad utilizzare Gambas. Qualche mese fa mi ha incuriosito la possibilitā di potere scrivere programmi con un linguaggio multipiattaforma. Mi sono cosė affacciato al mondo Python.
    Con Python ho cominciato a scrivere, su Linux-Ubuntu, il mio programma. Pur volendo puntare all'utilizzo della GUI per interfacciare il programma con l'utente, il primo input č stato realizzato a riga di comando. Fatta detta prima esperienza ho voluto fare indossare al mio miniprogramma un vestito grafico; mi sono perciō rivolto aTkinter, la GUI naturale di Python. La prima finestra, gestita dentro la classe d'avvio contiene solamente la barra-dei-menų ed un widget, sottostante a detta barra, attualmente vuoto·
    In uno dei menų dell'omonima barra, ho inseriro un'istruzione di richiamo di una nuova classe avente il compito di accogliere l'input di una serie di dati dall'immissione manuale da parte dell'utente. Ebbene codesta nuova classe non si avvia, Le istruziooni utilizzate sono le seguenti:

    HTML
    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)

    si dovrebbe avviare a questo punto la funzione ins_giocatori, definita pių sopra, nel programma:
    HTML
    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ų.

    Pur avendo messo in opera pių tentativi di modifica della riga, secondo me responsabile del malfunzionamento, "mGiocatori.add_command(label="Inserimento", command=lambda : self.ins_giocatori)", non sono mai riuscito a fare eseguire la funzione ins_giocatori. Mi potreste dare una mano?
    bye1
     
    Top
    .
  2. pieranpy
     
    .

    User deleted


    Mentre aspetto indicazioni, ho provato qualche altra modifica e sono riuscito a proseguire un pochino. Riporto le righe del codice precedente, ma con le modifiche apportate:
    CODICE
    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 = self.ins_giocatori)


    e
    CODICE
    def ins_giocatori(self):  
                   print "ramo inserimento giocatori in lavorazione"  
                   fIns_giocatori=Tk()  
                   fIns_giocatori.title="Sezione   INSERIMENTO  GIOCATORI"                    
                   giocInser=fInsGiocatori(fInsGiocatori)  
                   fIns_giocatori.mainloop()    
                   print "------ fine lavoro ------"


    Ora la nuova classe viene avviata ma mi compare un errore, per me incomprensibile:
    CITAZIONE
    ramo inserimento giocatori in lavorazione
    Exception in Tkinter callback
    Traceback (most recent call last):
    File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1413, in __call__
    return self.func(*args)
    File "calcio.py", line 20, in ins_giocatori
    giocInser=fInsGiocatori(fInsGiocatori)
    File "/home/pierubu13/mont/dativari/python_vari/python_progetti/avis_calcetto/giocatoriInser.py", line 5, in __init__
    fInsGiocatori.geometry("800x600")
    AttributeError: class fInsGiocatori has no attribute 'geometry'

    il codice corrispondente č il seguente:
    CODICE
    class fInsGiocatori:                #   Classe che si occupa della digitazione e salvataggio dei datai anagrafici dei giocatori
           def __init__(self, fin_insavvio):
                   fInsGiocatori.geometry("800x600")
                   #--------- quadro genitore ---------
                   qIns_giocatori = Frame(f1_insgiocatori)
                   qIns_giocatori.pack(side=TOP)
                   #------------------------------------------
     
    Top
    .
  3. uomo in verde
     
    .

    User deleted


    Thread trasferito in una sezione pių appropriata.
     
    Top
    .
2 replies since 2/2/2014, 15:05   180 views
  Share  
.