Python TypeError:leftClick()缺少1个必需的位置参数:';密码';
我是Python新手,正在尝试创建一个登录窗口。当用户输入用户名和密码时,程序将检索保存到文本文件中的设置用户名和密码,如果它们匹配,用户将能够使用程序。但是,我在尝试运行程序时不断收到此消息。这是我的密码: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)
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在单击时运行两个函数?您必须创建一个同时调用它们的函数,不能在一个按钮中添加两个命令