Python 函数在我自己调用之前自动调用?
我正在尝试制作一个验证应用程序的GUI版本,该应用程序检查CSV电子表格,并检查用户输入的数据是否与电子表格上的任何数据匹配 我遇到的问题是,在我在代码中调用它们之前,我使用的函数开始自动调用它们自己 她是脚本的非GUI版本,运行良好:Python 函数在我自己调用之前自动调用?,python,function,class,csv,python-3.x,Python,Function,Class,Csv,Python 3.x,我正在尝试制作一个验证应用程序的GUI版本,该应用程序检查CSV电子表格,并检查用户输入的数据是否与电子表格上的任何数据匹配 我遇到的问题是,在我在代码中调用它们之前,我使用的函数开始自动调用它们自己 她是脚本的非GUI版本,运行良好: import csv def logged (): print("You have succesfully logged in!") def wrong (): print("You never got the correct log in d
import csv
def logged ():
print("You have succesfully logged in!")
def wrong ():
print("You never got the correct log in details!")
login()
def login (x, y):
with open("login_details.csv") as file:
read = csv.reader(file, delimiter=",")
log = []
pas = []
for i in read:
l = i[0]
p = i[1]
log.append(l)
pas.append(p)
try:
logindx = log.index(x)
pasindx = pas.index(y)
if(logindx == pasindx):
logged()
else:
wrong()
except Exception as e:
wrong()
login()
我现在遇到的问题是,我使用的是GUI,而error()
函数似乎将其称为self
我会发布完整的代码,这样就容易理解了
from tkinter import *
import csv
#import logon
def wrong():
print("You got the Wrong login combination!")
enter.login()
def logged ():
print("You have successfuly loggoed in!")
class enter:
def login(x, y):
with open("login_details.csv") as file:
read = csv.reader(file, delimiter=",")
log = []
pas = []
for i in read:
l = i[0]
p = i[1]
log.append(l)
pas.append(p)
try:
logindx = log.index(x)
pasindx = pas.index(y)
if(logindx == pasindx):
logged()
else:
wrong()
except Exception as e:
wrong()
#Window
root = Tk()
root.title("Login")
root.geometry("250x250")
root.configure(bg="white")
main = Frame(root, bg="white")
main.pack()
main.place(height=100, x=25, y=10)
#Username
usr_lbl = Label(main, text="Username: ", bg="white")
usr_lbl.grid(row=0, column=0)
usr_inp = Entry(main, bg="light grey")
usr_inp.grid(row=0, column=1)
#Password
pass_lbl = Label(main, text="Password: ", bg="white")
pass_lbl.grid(row=1, column=0)
pass_inp = Entry(main, bg="light grey")
pass_inp.grid(row=1, column=1)
#Enter
enter = Button(main, bg="light grey", text="Enter", command=enter.login(usr_inp.get(), pass_inp.get()))
enter.grid()
enter.place(width=100, y=45, x=50)
root.mainloop()
我得到的错误是:
"You got the Wrong login combination!"
(这就是错误()函数打印的内容)
文件…,第23行,登录
logindx=log.index(x)
ValueError:“”不在列表中
在处理上述异常期间,发生了另一个异常:
文件…,第55行,在
回车=按钮(main,bg=“浅灰色”,text=“回车”,command=enter.login(usr\u inp.get(),pass\u inp.get())
文件…,第30行,登录
错()
文件…,第7行,输入错误
enter.login()
TypeError:login()缺少2个必需的位置参数:“x”和“y”
这使它看起来像是在我有机会调用它之前调用的函数。如何解决此问题?创建按钮时,您正在调用enter.login()
方法:
enter = Button(main, bg="light grey", text="Enter", command=enter.login(usr_inp.get(), pass_inp.get()))
您正在将enter.login()
的结果传递给命令
参数,而不是让按钮在用户按下按钮时调用它
添加lambda
匿名函数:
enter = Button(main, bg="light grey", text="Enter",
command=lambda: enter.login(usr_inp.get(), pass_inp.get()))
现在,一个函数对象(由lambda
生成)被传递到命令参数,该参数在按下按钮时被调用。反过来,lambda
然后调用usr\u inp.get()
和pass\u inp.get()
并将结果传递到enter.login()
谢谢,对于其他代码来说,这也是非常有意义的
enter = Button(main, bg="light grey", text="Enter",
command=lambda: enter.login(usr_inp.get(), pass_inp.get()))