我正在写一个tkinter UI。 我希望能够在每次更改时访问条目(用户添加一个字符) 所以我想我应该使用像这样的回调函数
def callback():
s = entry.get()
print (s)
varStr.trace_variable("w", callback)
然后我调用该函数。但我不确定它们是如何工作的,也无法找到。
当我运行程序时,我在输入字段中放入一个字符时出现此错误:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Program Files\Python33\lib\tkinter\__init__.py", line 1475, in __call__
return self.func(*args)
TypeError: callback() takes 0 positional arguments but 3 were given
我找到了一个可以添加'self'的地方但我还有两个要填充的参数。你能帮我知道它们应该是什么吗?
答案 0 :(得分:2)
如果没有使用callback()
的确切小部件,很难准确说出TKInter试图传递给它的参数。
您总是可以给回调一个变量参数参数:
def callback(*args):
s = entry.get()
print (s)
varStr.trace_variable("w", callback)
从this document您可以看到trace_variable()
回调传递了三个参数:
- Tk变量的名称。这不是Tk变量对象本身,但您可以使用该名称通过
root.globalgetvar(name)
和root.globalsetvar(name)
获取或设置值。不幸的是,我还没有找到任何方法从名称中获取实际的Tk变量对象;root.nametowidget(varName)
似乎不适用于Tk变量。- 变量索引,如果Tk变量是数组,则为空字符串。我不知道如何在Tkinter中创建一个Tk变量数组(但在Tk中很容易)。如果你想出来,你可以确定索引是一个整数的字符串表示,还是一个整数(我的猜测是它是一个字符串)。
- 访问模式,“w”,“r”或“u”之一。
然而, 每次调用varStr.trace_variable()
时都需要调用callback()
。
答案 1 :(得分:0)
将其更改为此以查看调用它的参数:
def callback(*args):
print ['CALLBACK', args]
s = entry.get()
print (s)
varStr.trace_variable("w", callback)
然后查阅.trace_variable
的文档或已注册回调的任何文档,了解参数的数量及其含义。