2016-07-06 2 views
3

このエラーに関する以前の投稿を読みましたが、私が間違っていることを特定できませんでした。誰かが私が間違っていること、ありがとうございました。AttributeErrorを回避する方法: '_tkinter.tkapp'オブジェクトには 'PassCheck'属性がありません

from tkinter import * 
    class Passwordchecker(): 
    def __init__(self): 
     self= Tk() 
     self.geometry("200x200") 
     self.title("Password checker") 
     self.entry=Entry(self) 
     self.entry.pack() 
     self.button=Button(self,text="Enter",command= lambda: self.PassCheck(self.entry,self.label)) 
     self.button.pack() 
     self.label=Label(self,text="Please a password") 
     self.label.pack() 
     self.mainloop() 
    def PassCheck(self1,self2): 
     password = self1.get() 
     if len(password)>=9 and len(password)<=12: 
      self2.config(text="Password is correct") 
     else: 
      self2.config(text="Password is incorrect") 

    run = Passwordchecker() 

答えて

2

エラーをトリガした原因は何ですか?

あなたは、このエラーメッセージが表示されます。

AttributeError: '_tkinter.tkapp' object has no attribute 'PassCheck' 

Passwordchecker()のインスタンスが初期化されるとき、それはあなたのプログラムがそのインスタンスに属する任意のさらなる方法を認識することはできませんあなたの__init__()mainloop()方法につまずくので。経験則として、NEVER run mainloop()__init__()の範囲内にあります。これにより、上記のエラーメッセージが完全に修正されます。しかし、我々は修正する他のものを持っている、そしてそのために、私たちはあなたのプログラムを再設計してみましょう:

デザイン

あなたのGUIを描画する__init__()内部で呼び出して、他の方法に頼る方が良いです。それをinitialize_user_interface()としましょう。

PassCheck()の場合は、まずオブジェクト自体をこのメソッドに追い越す必要があります。つまり、このメソッドに渡す最初の引数はselfです。実際にはPassCheck(self)という唯一の引数ですが、このメソッドから無駄に渡された残りの引数にアクセスできるためです。だからここ

プログラム

はあなたが必要とする完全なプログラムです。ここで

import tkinter as tk 
class Passwordchecker(tk.Frame): 
    def __init__(self, parent): 
     tk.Frame.__init__(self, parent) 
     self.parent = parent 
     self.initialize_user_interface() 

    def initialize_user_interface(self): 
     self.parent.geometry("200x200") 
     self.parent.title("Password checker") 
     self.entry=tk.Entry(self.parent) 
     self.entry.pack() 
     self.button=tk.Button(self.parent,text="Enter", command=self.PassCheck) 
     self.button.pack() 
     self.label=tk.Label(self.parent,text="Please a password") 
     self.label.pack() 

    def PassCheck(self): 
     password = self.entry.get() 
     if len(password)>=9 and len(password)<=12: 
      self.label.config(text="Password is correct") 
     else: 
      self.label.config(text="Password is incorrect") 

if __name__ == '__main__': 

    root = tk.Tk() 
    run = Passwordchecker(root) 
    root.mainloop() 

デモ

は、実行中のプログラムのスクリーンショットです:

enter image description here

+0

エラーが発生します私がguiのenterを押すとき – DrDevilHell

+0

私知っている。そして、それが私の返答を通じて取り組まれた問題です。 @DrDevilHell –

+0

私が提供するプログラムを実行する:あなたはもうエラーを取得しません@DrDevilHell –

関連する問題