首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在tkinter中使用trace()在回调函数中传递字符串var

如何在tkinter中使用trace()在回调函数中传递字符串var
EN

Stack Overflow用户
提问于 2020-11-18 14:24:38
回答 1查看 263关注 0票数 0

我刚开始使用python,并尝试创建两个条目小部件,以便在用户输入输入框后立即对数据进行评估。如何将字符串var传递给函数回调,以便它将准确返回更改的输入框。现在,回调函数只返回第一个输入框(entry1)。

这是我的代码:

代码语言:javascript
运行
复制
import tkinter
from tkinter import StringVar

main_wd = tkinter.Tk()
my_var1 = StringVar()
my_var2 = StringVar()

def my_callback(var):
    print("Traced variables {}".format(var.get())

my_var1.trace('write', my_callback(my_var1))
my_var2.trace('write', my_callback(my_var2))
entry1 = tkinter.Entry(main_wd, textvariable = my_var1).pack(padx = 5, pady = 5)
entry2 = tkinter.Entry(main_wd, textvariable = my_var2).pack(padx = 5, pady = 5)

main_wd.mainloop() 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-18 19:56:40

trace的用法是错误的,意思是,传递的位置参数是错误的,它必须是'w'而不是'write'。然后,在使用()时调用函数,因此需要为此使用lambda。所以你的trace就像:

代码语言:javascript
运行
复制
my_var1.trace('w', lambda *_,var=my_var1: my_callback(*_,var=var)) #*_ are the other arguments, like varname,value,mode ?
my_var2.trace('w', lambda *_,var=my_var2: my_callback(*_,var=var))

那么您的功能将是:

代码语言:javascript
运行
复制
def my_callback(*args,var):
    print("Traced variables {}".format(var.get()))

提示:最好是entry1entry2不要做None,所以说:

代码语言:javascript
运行
复制
entry1 = tkinter.Entry(main_wd, textvariable = my_var1)
entry1.pack(padx = 5, pady = 5)

entry2 = tkinter.Entry(main_wd, textvariable = my_var2)
entry2.pack(padx = 5, pady = 5)

当在与声明相同的行中使用pack()时,它将返回最后一个方法返回的内容。在本例中,pack()返回None。因此,为了使这些条目小部件可重用,可以在单独的行上对它们进行pack()grid()place()也是如此。

最后守则:

代码语言:javascript
运行
复制
import tkinter
from tkinter import StringVar

main_wd = tkinter.Tk()
my_var1 = StringVar()
my_var2 = StringVar()

def my_callback(*args,var):
    print("Traced variables {}".format(var.get()))
    
my_var1.trace('w', lambda *_,var=my_var1: my_callback(*_,var=var))
my_var2.trace('w', lambda *_,var=my_var2: my_callback(*_,var=var))

entry1 = tkinter.Entry(main_wd, textvariable = my_var1)
entry1.pack(padx = 5, pady = 5)

entry2 = tkinter.Entry(main_wd, textvariable = my_var2)
entry2.pack(padx = 5, pady = 5)

main_wd.mainloop() 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64894998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档