Forum >> Programmazione Python >> GUI >> Problema sul ciclo while

Pagina: 1

Ciao a tutti, sono nuovo del forum e del mondo della programmazione...
Qualche anno fa hanno cominciato a studiare Python ma poi per motivi vari ho mollato...
Ora l'ho ripreso e sono riuscito ad andare più avanti di allora e sono arrivato, anche se pur arrancando, alla creazione di GUI con Tkinter...
Ora per prova stavo tentando di creare un generatore di password casuali e,da linea di comando, ci ero riuscito, ma il problema è sopraggiunto una volta che ho provato a rivestirlo con una GUI...


from tkinter import *
from random import choice


def gen_pass():
	i = 0
	b = a.get()
	while i < b:
		parola = choice(lista)
		lblRisultato['text'] = parola
		i = i + 1

root = Tk()
root['background'] = "#808080"
root.geometry("500x250+450+250")
root.title("GenPass by Argwin")

lista = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "z",
"A", "B", "C", "D", "E", "F", "G", "H", "I", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "Z",
1, 2, 3, 4, 5, 6, 7, 8, 9, 0, "_", "-", "!"]
a = IntVar()

lblDescrizione = Label(root, text="Genera la tua password casuale.", font="Vivaldi 20", fg="#FFFFFF", bg="#808080")
lblDescrizione.pack()

lblSpaziatore = Label(root, text="", bg="#808080")
lblSpaziatore.pack()

lbl1 = Label(root, text="Di quanti caratteri vuoi che sia formata la password?", bg="#808080")
lbl1.pack()

lblSpaziatore = Label(root, text="", bg="#808080")
lblSpaziatore.pack()

casellaInserimento = Entry(root, textvariable=a)
casellaInserimento.pack()

lblSpaziatore = Label(root, text="", bg="#808080")
lblSpaziatore.pack()

btnInvio = Button(root, text="Genera password", command=gen_pass)
btnInvio.pack()

lblSpaziatore = Label(root, text="", bg="#808080")
lblSpaziatore.pack()

lblRisultato = Label(bg="white", width=50)
lblRisultato.pack()

root.mainloop()






Io vorrei che il ciclo while confrontasse la variabile "b", il cui valore viene preso dall'Entry "casellaInserimento" dato dall'utente e convertito in INT, con la variabile "i" che parte da 0 e ad ogni ciclo incrementa di 1, e che ripeta il ciclo sino a che i 2 numeri non siano uguali...

Il fatto è che non capisco se il ciclo viene eseguito o meno in quanto sulla label, in Output, esce si un componente della lista casuale, ma uno solo... Io vorrei che ne uscissero tanti quanti è il numero inserito dall'utente e stranamente pare non farlo...

Con Print funziona,nella label no...






--- Ultima modifica di Argwin in data 2017-05-05 00:45:22 ---


--- Ultima modifica di Argwin in data 2017-05-05 00:49:01 ---

--- Ultima modifica di Argwin in data 2017-05-05 00:50:26 ---
Anche se in ritardo causa problemi alla connessione internet, rispondo ora:
Il ciclo while viene eseguito correttamente, il problema è che nella label del riusltato viene visualizzata solo ed esclusivamente l'ultima variabile calcolata del ciclo, per verificare ciò, cambia il tuo codice nel modo seguente:
def gen_pass():
	i = 0
	b = a.get()
	#print (b, 'questo e b')
	passRisultante = []
	while i < b:
		parola = choice(lista)
		#lblRisultato['text'] = parola
		print(parola)
		passRisultante.append(parola)
		i = i + 1
	lblRisultato['text'] = passRisultante



Pagina: 1



Esegui il login per scrivere una risposta.