【发布时间】:2017-04-24 16:23:37
【问题描述】:
我的代码中的问题是,当我单击 topLevel() 窗口上的提交按钮时,它给了我标题中列出的错误。如果我尝试输入top.submit_button,则会引发submit_button 不是topLevel() 的一部分的错误。我已经搜索了整个stackoverflow,但没有发现与此类似的问题。我是 Python GUI 编程的新手,非常感谢您的帮助。
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()
【问题讨论】:
-
def submit_button(top)应该是def submit_button(self, top)如果它是类的一部分 -
请显示完整的错误。
-
哪个
Button?为什么给self.KUSubmit分配两个不同的? -
@depperm:
top参数的来源是什么(无论您建议的更改是否被放入)? -
create_button 是在启动时创建的第一个(主)窗口上的按钮。 submit_button 是 topLevel() 窗口底部的按钮。当我尝试按下作为 submit_button 函数的提交按钮时,编译器给我的错误是“create_button 恰好需要 1 个参数(给定 0)”。这是错误,复制并粘贴。并且双 KUSubmit 是复制粘贴错误。
标签: python function button tkinter