TypeError:login()缺少2个必需的位置参数:'username'和'password'

时间:2018-01-10 03:16:11

标签: python tkinter login arguments typeerror

我有以下代码:

from tkinter import *
from customer import Customer
from admin import Admin
from account import Account
from tkinter import ttk
root = Tk()

global username
global password


def login(self, username, password):
    name = username.get()
    passphrase = password.get()
    msg = self.customer_login(name, passphrase)




root.config(height=500, width=500)
frame = Frame(root)
Label(root, text="Login").grid(row=0, columnspan=4)

Label(root, text="Username").grid(row=3, sticky=W, padx=4)
username = Entry(root).grid(row=3, column=2, sticky=W, pady=4)
Label(root, text="Password").grid(row=4, sticky=W, padx=4,)
password = Entry(root, show="*").grid(row=4, column=2, sticky=W, pady=4)

loginButton = Button(root, text="Login", width=40)
loginButton.grid(row=5, columnspan=4, pady=4, padx=4)
loginButton.bind("<Button-1>", login)


root.mainloop()

我不断得到的错误是:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
    return self.func(*args)
TypeError: login() missing 2 required positional arguments: 'username' and 'password'

为什么我会收到此错误?

1 个答案:

答案 0 :(得分:2)

你试图只将一个参数传递给一个实际上不需要参数但 需要3个参数的方法。

当回调login附加到bind方法时,会向其发送一个位置参数,该参数表示有关该事件的信息,通常名为event,即使未明确传递像你一样。在这种情况下,假设self表示事件位置参数。虽然现在login缺少两个位置参数,usernamepassword。现在,如果你真的需要这些变量,我已经提供了不同的答案,但是因为你不是这个,我能想到的最简单。

替换:

def login(self, username, password):

使用:

def login(event):

此外,请参阅How to pass arguments to a Button command in Tkinter?,因为您可能希望使用按钮的command选项,而不是赢得调用方法的点击事件使用键盘按下按钮,同样bindcommand的行为也同样需要回调功能。唯一的区别是bind隐式传递第一个位置参数。