Python使用tkinter命令按钮传递参数

Python使用tkinter命令按钮传递参数,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正在创建一个登录系统,用户在其中输入密码和用户名,按下一个按钮,它就会进入功能以检查密码 from tkinter import * def login(): Usr = Tk() Usr.title("Login") Usr.geometry("200x150+860+400") Usr.configure(bg="grey22") usrBox = Label(Usr, text = &q

我正在创建一个登录系统,用户在其中输入密码和用户名,按下一个按钮,它就会进入功能以检查密码

from tkinter import *

def login():
    Usr = Tk()
    Usr.title("Login")
    Usr.geometry("200x150+860+400")
    Usr.configure(bg="grey22")
    usrBox = Label(Usr, text = "Username:", font=( "arial",12, "bold"), fg="white", bg="grey22").place(x=50, y=10)
    passbox = Label(Usr, text = "Password:", font=( "arial",12, "bold"), fg="white", bg="grey22").place(x=50, y=60)
    usrName = StringVar()
    usernameInput = ""
    passwordInput = ""
    PssWord = StringVar()
    usrName = Entry(Usr, textvariable= usernameInput, width=15, bg="lightgrey").place(x=50, y=37)
    PssWord = Entry(Usr, textvariable= passwordInput, width=15, bg="lightgrey").place(x=50, y=87)
    enter = Button(Usr, text = "login", width=11, height = 1, bg="lightgrey", activebackground="grey", font=("arial", 10, "bold"), command = checkPassword: action(usernameInput, passwordInput)).place(x=50, y=110)
    Usr.mainloop()
def checkPassword(usernameInput, passwordInput):
    print(usernameInput, passwordInput)

login()

该操作返回无效语法

您的代码存在多个问题:

  • 您必须创建一个调用
    checkPassword
    函数的
    lambda
  • 您创建了一些
    StringVar
    ,但随后将普通字符串传递给输入字段并在回调中使用它们;这些将不会用实际值更新,请改用
    StringVar
  • 如果你做了
    x=Widget(…).layout(…)
    ,那么
    x
    不是Widget,而是
    None
    ,这是所有布局函数(
    pack
    grid
    place
    等)的结果,但这不是问题,因为你无论如何都不使用所有这些变量
固定代码(摘录)

然后,在
checkPassword
函数中,使用
StringVar.get()
获取实际值。

您可以使用:

usrName = Entry(Usr, bd=3)
usrName.place(x=75, y=35)
enter = Button(Usr, text="Send", width=15, height=2,
       command=lambda: checkPassword(usrName.get()))
enter.place(x=25, y=75)

command=lambda:checkPassword(usernameInput,passwordInput)
另外,
usrBox=Label(…).place(x=50,y=10)
不是小部件,而是
None
。另外,两个“文本变量”应该是实际的
StringVar
,而不仅仅是普通字符串。
usrName = Entry(Usr, bd=3)
usrName.place(x=75, y=35)
enter = Button(Usr, text="Send", width=15, height=2,
       command=lambda: checkPassword(usrName.get()))
enter.place(x=25, y=75)