Topic: problema interazione funzione / widget in toplevel  (Letto 107 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline bambam

  • python unicellularis
  • *
  • Post: 31
  • Punti reputazione: 0
    • Mostra profilo
problema interazione funzione / widget in toplevel
« il: Febbraio 15, 2020, 19:13 »
buona sera , nel tentativo di sistemare l interfaccia grafica della mia applicazione ho spostato tutti i widget di una finestra nella mainframe tkinter in una finestra toplevel generata tramite funzione .


def new_w():
new=toplevel(root)

e di seguito ho  inserito gli altri widget tra cui una listbox e relative scrollbar .
da quando i widget sono all interno di questa toplevel generata da funzione non vengono piu riconosciuti come definiti da altre funzioni che dovrebbero interagire con essa.

es :
def somma():
   listbox.delete(0,end)
   listbox.insert (somma)
e a differenza di prima ,ora che listbox è all interno della toplevel non viene riconosciuta ..
qualcuno può spiegarmi perchè e magari illuminarmi su come risolvere il problema ?

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 231
  • Punti reputazione: 0
    • Mostra profilo
Re:problema interazione funzione / widget in toplevel
« Risposta #1 il: Febbraio 15, 2020, 22:56 »
Semplice : un oggetto (le variabili son anche oggetti) definito all'interno di una funzione "esiste" solo all'interno di quella funzione.

Esistono delle "regole" per definire "dove" sia visibile una variabile (od oggetto), tale visibilità è detta anche "scope" della variabile, cerca la definizione in questo pdf, ci si passa un po' tutti ma è  una delle prime cose da comprendere.

Poi è anche una questione della modalità di definizione della finestra : se non si rende un oggetto, tipo una listbox, variabile di istanza della finestra che la contiene, la finestra "se ne dimenticherà" una volta costruita, sarà presente ma non avrà riferimenti per interagirci direttamente.

Le difficoltà, aumentano definendo oggetti all'interno di funzioni, non calibrando attentamente si perdono "riferimenti" e tutto diventa più difficile. Per tale motivo, in  genere è preferibile definire le caratteristiche necessarie di un generico widget (lo sono anche le finestre) in una classe contenente tutti i riferimenti e metodi necessari e quindi istanziare l'oggetto così definito.
« Ultima modifica: Febbraio 15, 2020, 23:01 da nuzzopippo »

Offline bambam

  • python unicellularis
  • *
  • Post: 31
  • Punti reputazione: 0
    • Mostra profilo
Re:problema interazione funzione / widget in toplevel
« Risposta #2 il: Febbraio 18, 2020, 15:15 »
Perfetto , ora finalmente ho capito !! Ho dato un occhiata e mi é tutto piu chiaro , la differenza tra globali e locali é fondamentale per gestire questi casi ...

Offline nuzzopippo

  • python erectus
  • ***
  • Post: 231
  • Punti reputazione: 0
    • Mostra profilo
Re:problema interazione funzione / widget in toplevel
« Risposta #3 il: Febbraio 18, 2020, 15:49 »
Perfetto , ora finalmente ho capito !! Ho dato un occhiata e mi é tutto piu chiaro , la differenza tra globali e locali é fondamentale per gestire questi casi

Oddio, spero Tu non intenda utilizzare variabili globali, sarebbe una idea decisamente controproducente.

I concetti sulla visibilità delle variabili è necessario averli, pertanto Te li ho segnalati ma l'utilizzo di variabili globali è faccenda molto delicata, bisogna starci accorti o ti trovi in un ginepraio di errori "inspiegabili".

Piuttosto, documentati ed acquisisci, quanto meglio Ti riesce, concetti sulla programmazione ad oggetti in generale e nell'ambito python, sarà tempo ottimamente speso e sono necessari per poter programmare interfacce utene grafiche, senza di strada se ne fa poca.

Ciao