如何使用tkinter中的trace()在回调函数中传递字符串变量

2024-04-26 23:30:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,尝试创建两个输入小部件,以便在用户输入输入框后立即对数据进行评估。如何将字符串var传递到函数回调中,以便它准确返回已更改的输入框。现在回调函数只返回第一个输入框(entry1

这是我的密码:

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() 

Tags: 函数importmaintkintervarmycallbacktrace
1条回答
网友
1楼 · 发布于 2024-04-26 23:30:12

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

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))

那么您的函数将类似于:

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

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

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()将它们放在单独的行中。这同样适用于{}和{}

最终代码:

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() 

相关问题 更多 >