TypeError:取0个位置参数,但给出3个。无法弄清楚是什么论点

时间:2013-11-26 22:12:04

标签: python tkinter

我正在写一个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'的地方但我还有两个要填充的参数。你能帮我知道它们应该是什么吗?

2 个答案:

答案 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的文档或已注册回调的任何文档,了解参数的数量及其含义。