首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >tkinter -从csv文件进行基本登录表单检查

tkinter -从csv文件进行基本登录表单检查
EN

Stack Overflow用户
提问于 2019-05-16 07:26:07
回答 1查看 440关注 0票数 0

我正在尝试制作一个tkinter登录表单,程序应该允许现有用户在输入框中键入他们的用户名和密码,然后python需要读取存储在csv文件上的值,然后检查用户名和密码是否正确,然后使用提交按钮检查凭据是否正确;它将允许他们转到下一帧。我不确定如何让它正常工作,因为提交按钮什么也做不了。

下面是我的代码:

代码语言:javascript
复制
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文件的布局第一行是两个标题-第一列表示“用户”,第二列表示“密码”-其余行包括正确列和正确行中的用户和密码。

这可能有助于理解格式(以防我解释得不好):

代码语言:javascript
复制
 Users, Passwords
 user, password
 user, password

任何帮助都将不胜感激

EN

回答 1

Stack Overflow用户

发布于 2019-05-16 08:28:41

提交按钮不做任何事情

这很容易修复,问题是你的函数init创建了它调用命令的按钮,而不是存储它的command=checkUser(),有两种方法可以修复这个问题。

将按钮的命令选项更改为command=checkUsercommand=lambda: checkUser()

为了修复登录表单的工作方式,我更改了checkUser()函数,下面是我的更新

代码语言:javascript
复制
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循环,这样就不必每次都检查用户名和密码选项。

如果您有任何其他问题,请随时提问:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56158865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档