2017-04-24 7 views
-1

私のコード内の問題は、topLevel()ウィンドウの送信ボタンをクリックすると、タイトルにエラーが表示されるということです。もし私がを入れようとすると、submit_buttontopLevel()の一部ではないというエラーがスローされます。私はstackoverflow全体を検索しましたが、これに似た問題は見つかりませんでした。私はPythonのGUIプログラミングには新しく、本当に助けに感謝します。Tkボタンでエラーが発生する:

class SampleApp(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 

     self.KTitle = tk.Label(self, text="Login ") 
     self.KTitle.grid(row=7,column=0, columnspan=2) 
     self.KUsername = tk.Label(self, text="Username: ") 
     self.KUsername.grid(row=8,column=0, sticky=E) 
     self.KPassword = tk.Label(self, text="Password: ") 
     self.KPassword.grid(row=9,column=0, sticky=E) 
     self.KUEntry = tk.Entry(self, width=15) 
     self.KUEntry.grid(row=8,column=1, sticky=E) 
     self.KUPass = tk.Entry(self, width=15) 
     self.KUPass.grid(row=9,column=1, sticky=E) 

     self.KUSubmit = tk.Button(self, text="Submit") 
     self.KUSubmit.grid(row=10, column=0, columnspan=2) 

     self.KTitle = tk.Label(self, text=" or ") 
     self.KTitle.grid(row=11,column=0, columnspan=2) 

     self.KUSubmit = tk.Button(self, text="Create an Account", command=self.create_button) 
     self.KUSubmit.grid(row=12, column=0, columnspan=2) 

    def create_button(self): 

     top = Toplevel() 

     top.TitleHead = tk.Label(top, text="Create an Account ") 
     top.TitleHead.grid(row=0,column=2, columnspan=3) 

     #userInput 
     top.f_name = tk.Label(top, text="First Name: ") 
     top.f_name.grid(row=1,column=2, sticky=W) 
     top.Entry1 = tk.Entry(top, width=15) 
     top.Entry1.grid(row=1,column=3, sticky=W) 
     top.l_name = tk.Label(top, text="Last Name: ") 
     top.l_name.grid(row=2,column=2, sticky=W) 
     top.Entry2 = tk.Entry(top,width=15) 
     top.Entry2.grid(row=2,column=3, sticky=W) 
     top.username = tk.Label(top, text="Username: ") 
     top.username.grid(row=3,column=2, sticky=W) 
     top.Entry3 = tk.Entry(top, width=15) 
     top.Entry3.grid(row=3,column=3, sticky=W) 
     top.Ptoken = tk.Label(top, text="Password: ") 
     top.Ptoken.grid(row=4,column=2, sticky=W) 
     top.Entry4 = tk.Entry(top, width=15) 
     top.Entry4.grid(row=4,column=3, sticky=W) 

     top.Submit = tk.Button(top, text="Submit", command=submit_button) 
     top.Submit.grid(row=5, column=2, columnspan=2) 

    def submit_button(top): 

     x = top.Entry4.get() 
     salt = uuid.uuid4().hex 
     hashed_password = hashlib.sha512(x + salt).hexdigest() 

     add = ("INSERT INTO User " 
       "(ID, username, f_name, l_name, salt, PashHash) " 
       "VALUES (%s, %s, %s, %s, %s, %s)") 

     ID = int(0) 
     username = top.Entry3.get() 
     f_name = top.Entry1.get() 
     l_name = top.Entry2.get() 
     salt = salt 
     PashHash = hashed_password 

     data = (ID , top.username , top.f_name , top.l_name, salt, PashHash) 

     cursor.execute(add, data) 
     cnx.commit() 

app = SampleApp() 
app.mainloop() 
+1

'デフsubmit_buttonを(上)'デフsubmit_buttonを '(自己、トップ)'それはクラス – depperm

+0

の一部だ場合、完全なエラーを表示してくださいする必要があります。 –

+0

どの 'ボタン?なぜあなたは2つの異なるものを 'self.KUSubmit'に割り当てるのですか? – martineau

答えて

1

問題は、(第2)KUSubmitボタンにコールバック関数を設定する方法です。まず、SampleAppクラスのメソッドなので、自動的にself引数を受け取ります。

第2引数が引数を渡しています。これは実行できますが、この場合はself.top属性に値を保存し、自動self引数を使用してメソッドの値を取得する方が簡単です。

私はこれらの行に沿って以下のコードショーに変更を加えました。詳細については、# CHANGEDコメントの行を参照してください。

import Tkinter as tk 
from Tkinter import * 

class SampleApp(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 

     self.KTitle = tk.Label(self, text="Login ") 
     self.KTitle.grid(row=7,column=0, columnspan=2) 
     self.KUsername = tk.Label(self, text="Username: ") 
     self.KUsername.grid(row=8,column=0, sticky=E) 
     self.KPassword = tk.Label(self, text="Password: ") 
     self.KPassword.grid(row=9,column=0, sticky=E) 
     self.KUEntry = tk.Entry(self, width=15) 
     self.KUEntry.grid(row=8,column=1, sticky=E) 
     self.KUPass = tk.Entry(self, width=15) 
     self.KUPass.grid(row=9,column=1, sticky=E) 

     self.KUSubmit = tk.Button(self, text="Submit") 
     self.KUSubmit.grid(row=10, column=0, columnspan=2) 

     self.KTitle = tk.Label(self, text=" or ") 
     self.KTitle.grid(row=11,column=0, columnspan=2) 

     self.KUSubmit = tk.Button(self, text="Create an Account", 
            command=self.create_button) 
     self.KUSubmit.grid(row=12, column=0, columnspan=2) 

    def create_button(self): 

     self.top = top = Toplevel() # CHANGED 

     top.TitleHead = tk.Label(top, text="Create an Account ") 
     top.TitleHead.grid(row=0,column=2, columnspan=3) 

     #userInput 
     top.f_name = tk.Label(top, text="First Name: ") 
     top.f_name.grid(row=1,column=2, sticky=W) 
     top.Entry1 = tk.Entry(top, width=15) 
     top.Entry1.grid(row=1,column=3, sticky=W) 
     top.l_name = tk.Label(top, text="Last Name: ") 
     top.l_name.grid(row=2,column=2, sticky=W) 
     top.Entry2 = tk.Entry(top,width=15) 
     top.Entry2.grid(row=2,column=3, sticky=W) 
     top.username = tk.Label(top, text="Username: ") 
     top.username.grid(row=3,column=2, sticky=W) 
     top.Entry3 = tk.Entry(top, width=15) 
     top.Entry3.grid(row=3,column=3, sticky=W) 
     top.Ptoken = tk.Label(top, text="Password: ") 
     top.Ptoken.grid(row=4,column=2, sticky=W) 
     top.Entry4 = tk.Entry(top, width=15) 
     top.Entry4.grid(row=4,column=3, sticky=W) 

     top.Submit = tk.Button(top, text="Submit", command=self.submit_button) 
     top.Submit.grid(row=5, column=2, columnspan=2) 

    def submit_button(self): # CHANGED 

     x = self.top.Entry4.get() # CHANGED 
     salt = uuid.uuid4().hex 
     hashed_password = hashlib.sha512(x + salt).hexdigest() 

     add = ("INSERT INTO User " 
       "(ID, username, f_name, l_name, salt, PashHash) " 
       "VALUES (%s, %s, %s, %s, %s, %s)") 

     ID = int(0) 
     username = top.Entry3.get() 
     f_name = top.Entry1.get() 
     l_name = top.Entry2.get() 
     salt = salt 
     PashHash = hashed_password 

     data = (ID , top.username , top.f_name , top.l_name, salt, PashHash) 

     cursor.execute(add, data) 
     cnx.commit() 

app = SampleApp() 
app.mainloop() 
+0

コードをコピーして貼り付けたときに、このエラーが発生しました:Tkinterコールバックで例外が発生しました トレースバック(最新のコールが最後): ファイル "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib- (* args) ファイル "./Uninote.py"、行123、create_button top.Submit = tk.Button(top、text = "tk/Tkinter.py"、行1536、__call__内) Submit "、command = self.submit_button) ファイル" /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk/Tkinter.py "、1898行目、__getattr__ 戻り値getattr (self.tk、attr) AttributeError:submit_button – codeLearnerCamel

+0

私はそれを実行するときには実行しませんが、可能なすべての対話を試みなかったので、コードには他の問題がある可能性があります。エラーが発生したとき、あなたはどこで行っていましたか? – martineau

+0

トレースバックから、 'submit_button'がメソッドとして認識されていないように見えるので、実行が停止します。私が行った小さなテストでそれほど多くのことが起こっているので、私の答えに変更を加えずにコードをコピーすると、その問題がどうなるか分かりません。 – martineau

関連する問題