2016-07-29 17 views
0

Ich versuche, eine GUI zu erstellen, die ein Kennwort erstellt, und ich habe so weit wie das Erstellen des Kennworts und damit es in einem Etikett angezeigt. Wenn Sie jedoch mehrmals auf die Schaltfläche klicken, wird das alte Passwort nicht gelöscht, sondern nur überlagert. Ich bekomme auch einen Fehler, den ich anscheinend nicht berichtigen kann, obwohl er die GUI nicht zu beeinflussen scheint.Python Tkinter Etikett aktualisieren

Der Code ist so weit:

from tkinter import * 
import random 

myGui = Tk() 
myGui.geometry('300x200+700+250') 
myGui.title('Password Generator') 

def passwordgen(): 
    password = '' 

    for i in range(8): 
     ##----runs the for loop 8 times 
     if (i == 0) or (i == 4): 
      password = password + chr(random.randint(97, 122)) 

     if (i == 1) or (i == 5): 
      password = password + chr(random.randint(65, 90)) 

     if (i == 2) or (i == 6): 
      password = password + chr(random.randint(48, 57)) 

     if (i == 3) or (i == 7): 
      password = password + chr(random.randint(33, 47)) 

    passLabel = Label(myGui, text=password) 
    passLabel.grid(row=0, column=1, sticky=E) 

genPassBtn = Button(myGui, text="Generate Password", command=passwordgen) 
genPassBtn.bind("<Button-1>", passwordgen) 
genPassBtn.grid(row=0, column=0, sticky=W) 

myGui.mainloop() 

Der Fehler, den ich erhalten ist:

return self.func(*args) 
TypeError: passwordgen() takes 0 positional arguments but 1 was given 

Das Ergebnis i zu erreichen bin der Hoffnung, ist ein GUI zu erstellen, die ein Passwort erzeugt, erzeugt einen Hash Wert für generiertes Passwort, prüft die Passwortstärke, lädt den generierten Hash in eine Textdatei und kann das Passwort dann gegen gespeicherte Hashes verifizieren.

Weiter auf jetzt und von Beratung erhalten habe ich den Code geändert und hinzugefügt, um die Stärke zu überprüfen. Der Code sieht jetzt so aus:

from tkinter import * 
import random 

myGui = Tk() 
myGui.geometry('300x200+700+250') 
myGui.title('Password Generator') 

def passwordgen(): 
    password = '' 

    for i in range(8): 
     ##----runs the for loop 8 times 
     if (i == 0) or (i == 4): 
      password = password + chr(random.randint(97, 122)) 

     if (i == 1) or (i == 5): 
      password = password + chr(random.randint(65, 90)) 

     if (i == 2) or (i == 6): 
      password = password + chr(random.randint(48, 57)) 

     if (i == 3) or (i == 7): 
      password = password + chr(random.randint(33, 47)) 

    strPassword.set(password) 


def checkPassword(): 

    strength = ['Blank', 'Very Weak', 'Weak', 'Medium', 'Strong', 'Very Strong'] 
    score = 1 
    password = strPassword.get() 

    if len(password) < 1: 
     return strength[0] 

    if len(password) < 4: 
     return strength[1] 

    if len(password) >= 8: 
     score += 1 

    if re.search('[0-9]', password): 
     score += 1 

    if re.search('[a-z]', password) and re.search('[A-Z]', password): 
     score += 1 

    if re.search('.', password): 
     score += 1 

    passwordStrength.set(strength[score]) 

genPassBtn = Button(myGui, text="Generate Password", command=passwordgen) 
strPassword = StringVar() 

lblPassword = Label(myGui, textvariable=strPassword) 
lblPassword.grid(row=0, column=1, sticky=W) 
genPassBtn.grid(row=0, column=0, sticky=W) 

passwordStrength = StringVar() 
checkStrBtn = Button(myGui, text="Check Strength", command=checkPassword) 
checkStrBtn.grid(row=1, column=0) 

checkStrLab = Label(myGui, textvariable=passwordStrength) 
checkStrLab.grid(row=1, column=1) 

myGui.mainloop() 

Antwort

2

Versuchen Sie dieses Beispiel.

from tkinter import * 
import random 

myGui = Tk() 
myGui.geometry('300x200+700+250') 
myGui.title('Password Generator') 

def passwordgen(): 
    password = '' 

    for i in range(8): 
     ##----runs the for loop 8 times 
     if (i == 0) or (i == 4): 
      password = password + chr(random.randint(97, 122)) 

     if (i == 1) or (i == 5): 
      password = password + chr(random.randint(65, 90)) 

     if (i == 2) or (i == 6): 
      password = password + chr(random.randint(48, 57)) 

     if (i == 3) or (i == 7): 
      password = password + chr(random.randint(33, 47)) 

    strPassword.set(password) 

genPassBtn = Button(myGui, text="Generate Password", command=passwordgen) 
strPassword = StringVar() 
lblPassword = Label(myGui, textvariable=strPassword) 
lblPassword.grid(row=0,column=1, sticky=W) 
genPassBtn.grid(row=0, column=0, sticky=W) 

myGui.mainloop() 

Hier ist, was ich getan

  1. Anstatt ein neues Label jedes Mal zu schaffen, ändere ich den Text eines Etiketts die StringVar namens strPassword.
  2. Sie müssen keine Schaltfläche an einen Klick binden, um eine Funktion aufzurufen, dies geschieht mit Button (..., command = myFunction) bereits.
+0

Vielen Dank scotty. Kann ich jetzt strPassword verwenden und die Stärke überprüfen? – JSmith

+0

Ich bin nicht sicher, was Sie mit Stärke meinen, aber Sie können strPassword.get() verwenden, um den Inhalt der Zeichenfolge für andere Zwecke zu verwenden – scotty3785

+0

Ich wollte sagen, dieses Passwort ist sehr schwach, schwach, mittel, stark usw. .. Gegen eine Reihe von Argumenten wie, hat Kleinbuchstaben, Großbuchstaben, Zahlen oder Sonderzeichen. – JSmith