我正在尝试创建一个tkinter登录表单,该程序应该允许现有用户在输入框中键入其用户名,并在输入框中键入其密码,然后python需要读取存储在csv文件中的值,并且然后检查用户名和密码是否正确,然后使用“提交”按钮检查凭据是否正确以及是否正确;它将允许他们转到下一帧。我不确定如何使其正常工作,因为“提交”按钮没有任何作用。
这是我的代码:
class MainMenu(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text=" Main Menu - Login ", fg="red", font=controller.title_font2)
label.pack(side="top", fill="x", pady=20)
usernameL = tk.Label(self, text="Username").pack(side="top")
uUserLogin = tk.Entry(self)
uUserLogin.pack()
passwordL = tk.Label(self, text="Password").pack(side="top")
uUserPassword = tk.Entry(self)
uUserPassword.pack()
def checkUser():
uLoginUser = False
uLoginPassword = False
uUserCheck = uUserLogin.get()
uUserCheckP = uUserPassword.get()
with open("Users.csv", "r") as f:
csvreader = csv.reader(f, delimiter=",")
for row in csvreader:
if uUserCheck == row[0]:
uLoginUser == True
if uUserCheckP == row[1]:
uLoginPassword == True
#labelT = tk.Label(self, text="Hello")
#labelT.pack()
if uLoginUser and uLoginPassword == True:
controller.show_frame("MainTMenu")
submit = tk.Button(self, text="Submit",
command=checkUser())
submit.pack()
#If correct -> Go to next frame
csv文件的排列方式为第一行为2个标题-第一列为“ Users”,第二列为“ Passwords”-其余各行在正确的列和正确的行中包含用户和密码
这可能有助于理解格式(以防我不好解释):
Users, Passwords
user, password
user, password
任何帮助将不胜感激
答案 0 :(得分:0)
“提交”按钮没有任何作用
这很容易解决,问题是您的函数init创建了调用命令的按钮而不是存储按钮command=checkUser()
,有两种解决方法。
将按钮的命令选项更改为command=checkUser
或command=lambda: checkUser()
为解决您的登录表单的工作方式,我更改了checkUser()函数,这是我的更新
def checkUser():
uUserCheck = uUserLogin.get()
uUserCheckP = uUserPassword.get()
with open("Users.csv", "r") as f:
csvreader = csv.reader(f, delimiter=",")
for row in csvreader:
if uUserCheck == row[0] and uUserCheckP == row[1]:
labelT = tk.Label(self, text="Hello")
labelT.pack()
controller.show_frame("MainTMenu")
break
这将取消使用嵌套的if语句,并且如果找到用户名和密码匹配项,则将终止for循环,因此不必每次都检查每个用户名和密码选项。
如果您有任何其他问题,请随时提问:)