【问题标题】:TypeError: leftClick() missing 1 required positional argument: 'password'类型错误:leftClick() 缺少 1 个必需的位置参数:“密码”
【发布时间】:2015-05-10 05:46:29
【问题描述】:

我是 Python 新手,正在尝试创建一个登录窗口。当用户输入他们的用户名和密码时,程序将检索保存到文本文件中的设置的用户名和密码,如果它们匹配,用户将能够使用该程序。但是,我在尝试运行该程序时不断收到此消息。这是我的代码:

    from tkinter import *
    login = Tk()
    Label(login, text ="Username").grid(row = 0)
    Label(login, text ="Password").grid(row = 1)

    username = StringVar()
    password = StringVar()

    i1 = Entry(login, textvariable=username)
    i2 = Entry(login, textvariable=password, show = "*")

    i1.grid(row = 0, column = 1)
    i2.grid(row = 1, column = 1)

    def leftClick(username, password):
            f = open('godhelpme.txt', 'r')
            file = open('some_file.txt', 'r')
            if username == (f.read()):
                    if password == (file.read()):
                            print ("HELLOOOO")
                    else:
                            print ("invalid username/password")
            else: print ("invalid username/password")


    button2 = Button(login, text = "Log In", command = save)
    button2.grid(columnspan = 2)
    button2.bind("<Button-1>", leftClick)



    login.mainloop()

这就是我尝试为按钮添加两个功能的方式

    from tkinter import *
    from tkinter import ttk


    def win1():
        mainframe = ttk.Frame(root, padding = '3 3 12 12')
        mainframe.grid(column = 0, row = 0, sticky = (N, W, E, S))
        mainframe.columnconfigure(0, weight = 1)
        mainframe.rowconfigure(0, weight = 1)

        ttk.Button(mainframe, text = 'Register', command = register).grid(
            column = 1, row = 1, sticky = W)
        ttk.Button(mainframe, text = 'Log In', command = login).grid(
            column = 1, row = 2, sticky = W)

        root.mainloop()

    def combine_funcs(save, quit):
        def combined_func(save, quit):
            for f in funcs:
                f(save, quit)
        return combined_funcs

    def quit():
        root.withdraw()

    def register():
        quit()
        def save():
            import json as serializer
            with open('godhelpme.txt', 'w') as f:
                serializer.dump(username.get(), f)
            with open('some_file.txt', 'w') as f:
                serializer.dump(password.get(), f)
            register.quit()

        register = Tk()
        Label(register, text ="Username").grid(row = 0)
        Label(register, text ="Password").grid(row = 1)

        username = StringVar()
        password = StringVar()

        e1 = Entry (register, textvariable=username)
        e2 = Entry (register, textvariable=password, show= "*")

        e1.grid(row = 0, column = 1)
        e2.grid(row = 1, column = 1)


        button1 = Button(register, text = "Register", command = combined_funcs(save, quit))
        button1.grid(columnspan = 2)
        button1.bind("<Button-1>")

        register.mainloop

【问题讨论】:

    标签: python user-interface python-3.x tkinter


    【解决方案1】:

    绑定按钮时,回调函数应该是一个获取事件作为参数的函数。 tkinter 不知道你期望得到什么用户名和密码,所以你不能绑定那种函数。

    您需要创建一个回调函数,获取用户输入的用户名和密码,然后使用这些参数调用leftClick 函数。

    也没有必要使用绑定到 ,因为您不需要知道点击的坐标。你的代码中已经有了command = save,所以当按下按钮时它应该调用一个函数save

    您可能想要这样的东西,因为您已经将 Entry 小部件绑定到变量,所以它们会自动填充:

    def clickLogin():
            f = open('godhelpme.txt', 'r')
            file = open('some_file.txt', 'r')
            if username == (f.read()):
                    if password == (file.read()):
                            print ("HELLOOOO")
                    else:
                            print ("invalid username/password")
            else: print ("invalid username/password")
    
    
    button2 = Button(login, text = "Log In", command = clickLogin)
    button2.grid(columnspan = 2)
    

    并且没有调用绑定按钮上的任何其他内容。

    【讨论】:

    • 如何创建回调函数?我很抱歉,因为我对此非常陌生
    • 我试过了,现在它说“TypeError: clickLogin() missing 1 required positional argument: 'event'”
    • @ninjedi 抱歉,混淆了回调类型。删除了参数,命令不带任何参数。
    • 现在好像可以用了,谢谢!您是否知道如何为按钮添加两个命令?我已经尝试了一些方法,但似乎没有一个有效
    • @ninjedi 点击运行两个函数?您必须创建一个同时调用它们的函数,您不能将两个命令添加到一个按钮
    猜你喜欢
    • 2019-09-09
    • 2020-11-25
    • 2018-04-04
    • 2022-01-11
    • 1970-01-01
    • 2018-09-12
    • 2021-08-05
    • 2021-07-06
    相关资源
    最近更新 更多