2016-07-29 5 views
0

Я пытаюсь создать gui, который создает пароль, и я добрался до создания пароля и создания его на ярлыке. Однако, когда кнопка нажата несколько раз, она появляется, старый пароль не исчезает, он просто накладывается сверху. Я также получаю сообщение об ошибке, которое я не могу исправить, хотя это, похоже, не влияет на gui.Обновление ярлыка Python Tkinter

код до сих пор:

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

Ошибка я получаю это:

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

Исход я надеюсь добиться того, чтобы создать графический интерфейс, который генерирует пароль, генерирует хэш значение для сгенерированного пароля, проверяет силу пароля, загружает сгенерированный хэш в текстовый файл и затем может проверять пароль на сохраненные хэши.

Далее, после получения полученного ответа, я внесла изменения в код и добавил дополнительно, чтобы проверить прочность. Код теперь выглядит так:

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

ответ

2

Попробуйте этот пример.

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

Вот что я сделал

  1. Вместо того, чтобы создать новую метку каждый раз, когда я изменить текст этикетки, используя STRINGVAR под названием strPassword.
  2. Вам не нужно привязывать кнопку к щелчку, чтобы вызвать функцию, используя Button (..., command = myFunction) делает это уже.
+0

Большое спасибо скотти. Могу ли я теперь использовать strPassword и проверить силу? – JSmith

+0

Я не уверен, что вы подразумеваете под силой, но вы можете использовать strPassword.get(), чтобы вернуть содержимое строки для использования в других целях. – scotty3785

+0

Я хотел сказать, что этот пароль очень слабый, слабый, средний, сильный и т. Д. .. aginst набор аргументов вроде, имеет строчные, прописные, числовые или специальные символы. – JSmith