如何在Tkinter中获取用户输入并传递给函数得到输出结果
Tkinter 输入值传参调用自定义函数解决方案
问题原因
你当前代码的问题有两个:
- Button的
command参数直接绑定getvals函数时,Tkinter不会自动向函数传递输入框的内容参数,会触发参数数量不匹配的报错 - 你定义的
getvals函数没有处理输入值获取的逻辑,关联到Entry的StringVar需要调用.get()方法才能拿到用户输入的字符串内容
修改方案
方法1:用lambda匿名函数包装传参(符合你要把输入值作为参数传入函数的需求)
完整可运行代码如下:
import tkinter as tk from tkinter import * root = tk.Tk() root.geometry("644x344") def getvals(email, date_to, date_from): """ 你的自定义业务处理逻辑写在这里 """ # 测试打印语句,可替换为你自己的处理逻辑 print(f"获取到的邮箱:{email}") print(f"开始时间:{date_to}") print(f"结束时间:{date_from}") Label(root,text="Automatic Email Saver",font="comicansms 13 bold",pady=15).grid(row=0,column=3) Email = Label(root, text="Email") date_start = Label(root, text="Starting Date And Time") date_end = Label(root, text="Ending Date and Time") Email.grid(row=1, column=2) date_start.grid(row=2, column=2) date_end.grid(row=3, column=2) Emailvalue = StringVar() date_startvalue = StringVar() date_endvalue = StringVar() Emailentry = Entry(root, textvariable=Emailvalue) date_toentry = Entry(root, textvariable=date_startvalue) date_endentry = Entry(root, textvariable=date_endvalue) Emailentry.grid(row=1, column=3) date_toentry.grid(row=2, column=3) date_endentry.grid(row=3, column=3) # 核心修改:用lambda主动传递三个输入值作为参数 Button(text="Submit", command=lambda: getvals(Emailvalue.get(), date_startvalue.get(), date_endvalue.get())).grid(row=5, column=3) root.mainloop()
方法2:直接在函数内获取全局的StringVar值(不需要传参)
如果不需要强制把值作为参数传入,也可以直接在函数内部调用三个StringVar的.get()方法获取输入,仅需要修改getvals定义和Button绑定逻辑:
def getvals(): email = Emailvalue.get() date_to = date_startvalue.get() date_from = date_endvalue.get() # 后续处理逻辑 print(f"获取到的邮箱:{email}") # Button绑定不需要lambda,直接写函数名即可 Button(text="Submit", command=getvals).grid(row=5, column=3)
内容的提问来源于stack exchange,提问作者Rishab S
相关产品推荐
相关产品推荐

