Python TypeError:接受0个位置参数,但提供了3个。Can';我搞不懂什么论点

Python TypeError:接受0个位置参数,但提供了3个。Can';我搞不懂什么论点,python,tkinter,Python,Tkinter,我正在写一个tkinter用户界面。 我希望能够在每次更改时访问条目(用户添加一个字符) 所以我想我应该使用这样的回调函数 def callback(): s = entry.get() print (s) varStr.trace_variable("w", callback) 然后我调用这个函数。但我不确定它们是如何工作的,也不知道 当我运行程序时,在输入字段中输入一个字符后,我出现了以下错误: Exception in Tkinter callback Tr

我正在写一个tkinter用户界面。 我希望能够在每次更改时访问条目(用户添加一个字符) 所以我想我应该使用这样的回调函数

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”的地方,但我还有两个参数需要填充。您能帮我知道它们应该是什么吗?

将其更改为此,以查看使用哪个参数调用它:

def callback(*args):
    print ['CALLBACK', args]
    s = entry.get()
    print (s)
    varStr.trace_variable("w", callback)

然后查阅
.trace\u variable
或您注册回调的任何文件,了解参数的数量及其含义。

如果没有您使用的确切小部件
callback()
,很难准确说出TKInter试图传递给它的参数

您始终可以为回调提供变量参数:

def callback(*args):
    s = entry.get()
    print (s)
    varStr.trace_variable("w", callback)
从中可以看到,
trace\u variable()
回调传递了三个参数:

  • Tk变量的名称。这不是Tk变量对象本身,但您可以使用名称通过
    root.globalgetvar(name)
    root.globalsetvar(name)
    获取或设置值。不幸的是,我没有找到任何方法从Tk变量对象的名称中获取实际的Tk变量对象
    root.nametWidget(varName)
    似乎不适用于Tk变量
  • 变量索引,如果Tk变量是数组,则为空字符串。我不知道如何在Tkinter中创建Tk变量数组(但在Tk中很容易)。如果你弄明白了,你就可以确定索引是一个整数的字符串表示,还是一个整数(我猜它是一个字符串)
  • 访问模式为“w”、“r”或“u”中的一种

但是,每次调用
callback()
时,您不需要调用
varStr.trace\u variable()

您是如何注册回调的?您能告诉我们您使用
callback
作为小部件命令的行吗?@MartijnPieters——我猜这是一个缩进问题
varStr.trace_变量(“w”,回调)
看起来缩进得有点太远了。