Python TypeError:leftClick()缺少1个必需的位置参数:';密码';

Python TypeError:leftClick()缺少1个必需的位置参数:';密码';,python,user-interface,python-3.x,tkinter,Python,User Interface,Python 3.x,Tkinter,我是Python新手,正在尝试创建一个登录窗口。当用户输入用户名和密码时,程序将检索保存到文本文件中的设置用户名和密码,如果它们匹配,用户将能够使用程序。但是,我在尝试运行程序时不断收到此消息。这是我的密码: from tkinter import * login = Tk() Label(login, text ="Username").grid(row = 0) Label(login, text ="Password").grid(row = 1)

我是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()
从tkinter导入*
login=Tk()
标签(login,text=“Username”).grid(行=0)
标签(登录,text=“Password”).grid(行=1)
username=StringVar()
密码=StringVar()
i1=条目(登录名,textvariable=用户名)
i2=输入(登录,textvariable=密码,show=“*”)
i1.网格(行=0,列=1)
i2.网格(行=1,列=1)
def leftClick(用户名、密码):
f=打开('godhelpme.txt','r')
file=open('some_file.txt','r')
如果用户名==(f.read()):
如果密码==(file.read()):
打印(“Hellooo”)
其他:
打印(“无效用户名/密码”)
其他:打印(“无效用户名/密码”)
button2=按钮(登录,text=“登录”,命令=保存)
按钮2.网格(columnspan=2)
按钮2.绑定(“,左键单击)
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
从tkinter导入*
从tkinter导入ttk
def win1():
mainframe=ttk.Frame(根,填充='3 12')
grid(列=0,行=0,粘性=(N,W,E,S))
mainframe.columnconfigure(0,权重=1)
mainframe.rowconfigure(0,权重=1)
按钮(大型机,文本='Register',命令=Register).grid(
列=1,行=1,粘性=W)
按钮(大型机,文本='登录',命令=登录).grid(
列=1,行=2,粘性=W)
root.mainloop()
定义组合函数(保存、退出):
def组合函数(保存、退出):
对于函数中的f:
f(保存、退出)
返回组合函数
def quit():
root.draw()
def寄存器():
退出
def save():
将json作为序列化程序导入
以open('godhelpme.txt','w')作为f:
serializer.dump(username.get(),f)
将open('some_file.txt','w')作为f:
serializer.dump(password.get(),f)
register.quit()
寄存器=Tk()
标签(register,text=“Username”).grid(行=0)
标签(register,text=“Password”).grid(行=1)
username=StringVar()
密码=StringVar()
e1=条目(寄存器,textvariable=用户名)
e2=条目(寄存器,textvariable=密码,show=“*”)
e1.网格(行=0,列=1)
e2.网格(行=1,列=1)
button1=按钮(寄存器,text=“寄存器”,命令=组合函数(保存,退出))
按钮1.网格(columnspan=2)
按钮1.绑定(“”)
register.mainloop

绑定按钮时,回调函数应该是获取事件作为参数的函数。tkinter不知道用户名和密码的预期值,因此无法绑定此类函数

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

此外,也不需要使用绑定到,因为您不需要知道单击的坐标。您的代码中已经有
command=save
,因此按下按钮时,它应该调用一个函数
save

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

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()缺少1个必需的位置参数:'event'”@ninjedi抱歉,混淆了回调类型。删除了参数,命令不接受任何参数。它似乎正在工作,谢谢!你知道如何为一个按钮添加两个命令吗?我试过几种方法,但似乎没有一种有效work@ninjedi在单击时运行两个函数?您必须创建一个同时调用它们的函数,不能在一个按钮中添加两个命令