2016-07-29 14 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() 

私が受け取るエラーは次のとおりです、私は達成するために期待しています結果は、パスワードを生成し、GUIを作成することです

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. をやったものだ、私はstrPasswordと呼ばれるSTRINGVARを使用してラベルのテキストを変更します。
  2. Button(...、command = myFunction)を使用してボタンをバインドして関数を呼び出す必要はありません。
+0

多くの感謝のscotty。 strPasswordを使用して強度を確認できますか? – JSmith

+0

強さの意味は不明ですが、strPassword.get()を使用して他の目的に使用する文字列の内容を返すことができます – scotty3785

+0

このパスワードは非常に弱い、弱い、中程度の、強いなどと言いたいと思います.. aginstのような引数セットには、小文字、大文字、数字、または特殊文字があります。 – JSmith

関連する問題