我正在做的课程项目的一部分要求我创建一个登录页面并合并一个数据库,我已经成功地使用正常形式的python,但我现在必须使用tkinter将其放入GUI中为了使它工作,我不得不在页面上使用一个函数来调用数据库中的记录,并与用户输入进行比较。我遇到的问题是,当我调用这个函数时,它什么也没做,可能是因为我的编码中有一个简单的错误,但我不能因为某种原因弄清楚它。
class LogInScreen(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
description = tk.Label(self, text="Please log in to gain access to the content of this computer science program.", font=LARGE_FONT)
description.pack()
label1 = tk.Label(self, text="Enter your username:")
label1.pack()
self.usernameEntry = tk.Entry(self)
self.usernameEntry.pack()
label2 = tk.Label(self, text="Enter your password:")
label2.pack()
self.passwordEntry = tk.Entry(self, show="*")
self.passwordEntry.pack()
notRecognised=tk.Label(self, text="")
logInButton = tk.Button(self, text="Log In", command=lambda: self.logUserIn)
logInButton.pack()
self.controller = controller
button1 = tk.Button(self, text="Back to Home",
command=lambda: controller.show_frame(SplashScreen))
button1.pack()
button2 = tk.Button(self, text="Sign Up",
command=lambda: controller.show_frame(SignUpScreen))
button2.pack()
def logUserIn():
username = self.usernameEntry.get()
password = self.passwordEntry.get()
find_user = ("SELECT * FROM user WHERE username == ? AND password == ?")
cursor.execute(find_user,[(username),(password)])
results = cursor.fetchall()
if results:
controller.show_frame(HubScreen)
else:
loginResult = tk.Label(self, text="Account credentials not recognised, please try again")
loginResult.pack()
我不确定如何让这个功能发挥作用,真的需要这里的人们能够提供的帮助。我花了太长时间查看代码并且没有做任何事情继续进行,我已经厌倦了解决它,执行程序的其他部分但是如果没有这个功能,很难评估它们。很抱歉给那些比我更有才华的人带来不便,但这是一个学习过程,我正在努力改进。
答案 0 :(得分:2)
在这一行
logInButton = tk.Button(self, text="Log In", command=lambda: self.logUserIn)
此
lambda: self.logUserIn
什么都不做。这定义了一个不带参数的函数,返回函数self.logUserIn
。它不会调用该函数,它只返回self.logUserIn
所有的内容。换句话说,它实际上是一种无操作。相反,你可以写command=self.logUserIn
。但是,您需要正确地使logUserIn
成为一个带有一个参数的方法(自我):
def logUserIn(self):
...
你还有其他一些错误,例如
controller.show_frame(HubScreen)
那应该是self.controller
。调试Tkinter很棘手,因为你不会立即在控制台中看到回溯,但是如果你退出Window,你会看到一个回溯显示你搞砸了。