Forum >> Principianti >> Nuovo utente e primi problemi

Pagina: 1

Ciao!
Sono Luca, sono nuovo del forum e anche di python.

Sto "utilizzando" Python3 e PyQt5. Sto cercando di realizzare un programma che, alla pressione di un tasto, cambia il valore di un lcd prendendo il valore da una stringa. Fino a che indico la posizione della striga, alla pressione del tasto l'lcd visualizza il valore corretto della string.

Il problema si pone quando cerco di passare alla posizione successiva della stringa premendo nuovamente il tasto..... non ho trovato modo per farlo.




Questa è la parte incriminata del codice funzionante:





        self.pushButton_3.clicked.connect(self.addInputTextToListbox)

 

    global txt

    txt = [125,250,500,1000,2000]

    global ind

    ind=0

    def addInputTextToListbox(self):

        self.lcdNumber_3.display(txtind)





---------------------

Come faccio a passare al valore successivo di txt premendo nuovamente il tasto?




grazie








--- Ultima modifica di ㎝ in data 2017-10-11 15:48:32 ---
Ciao e benvenuto, sono arrivato tardi, ho visto che hai scritto sul canale Telegram.

Vediamo cosa ti rispondono, altrimenti ci ragioniamo insieme.

Cya
Ciao!



Aggiungo che ho provato a mettere anche




Ind=ind+1




Ma non funziona
Ecco la risposta di Vladimir Cravero sul canale Telegram.

global a module level non serve


L'idea è questa: quando sei in una funzione, hai il tuo set di variabili personale, in teoria non vedi nulla di quello che accade fuori dalla funzione, a parte le variabili che ti vengono passate come argomento. In Python, se tu scrivi variabile = qualcosa, l'interprete controlla se variabile esiste già. Se non esiste la crea, altrimenti usa quella che esiste. Quando sei in una funzione, quello che sta fuori non conta, l'interprete cerca se esiste, siccome dentro non esiste allora la crea.

Ad esempio:
a = 0

def incrementa():
    a = a + 1

def stampa():
    print(a)

Se chiami incrementa() e poi stampa(), vedrai 0 perché incrementa ha il suo set di variabili private, mentre in stampa(), siccome devi leggere a, e siccome non esiste, allora l'interprete dice: "Ah ok fammi vedere se c'è globale", e dato che c'è usa quella. La differenza sta nel fatto che, in incrementa(), a è a sinistra di uguale, ovvero viene scritta, mentre in stampa() viene solo letta per obbligare l'interprete a usare la a globale, devi usare la parola chiave global:
a = 0

def incrementa():
    global a = a + 1

def stampa():
    print(a)

Spero che ora sia più chiaro, conclude Vladimir.
bene, sono riuscito!
Ho messo il primo "ind=0" fuori dalla classe e poi global ind e ind+=1 dentro a def addInputTextToListbox(self):




ora va!




Grazie


Pagina: 1



Esegui il login per scrivere una risposta.