Python tkinter跟踪错误

Python tkinter跟踪错误,python,python-2.7,tkinter,trace,Python,Python 2.7,Tkinter,Trace,我正在尝试为我的代码编写GUI。我的计划是使用tkinter的StringVar,DoubleVar等实时监控我的输入。所以我找到了DoubleVar.trace('w',callback)函数。但是,每次进行更改时,我都会遇到一个例外: Exception in Tkinter callback Traceback (most recent call last): File "C:\Users\Anaconda2\lib\lib-tk\Tkinter.py", line 1542, in

我正在尝试为我的代码编写GUI。我的计划是使用tkinter的
StringVar
DoubleVar
等实时监控我的输入。所以我找到了
DoubleVar.trace('w',callback)
函数。但是,每次进行更改时,我都会遇到一个例外:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\Anaconda2\lib\lib-tk\Tkinter.py", line 1542, in __call__
    return self.func(*args)
TypeError: 'NoneType' object is not callable
我不知道出了什么问题。我正在使用python 2.7 我的代码如下:

from Tkinter import *
class test(Frame):
    def __init__(self,master):
        Frame.__init__(self,master=None) 
        self.main_frame = Frame(master);
        self.main_frame.pack() 
        self.testvar = DoubleVar()
        self.slider_testvar = Scale(self.main_frame,variable = self.testvar,from_ = 0.2, to = 900, resolution = 0.1, orient=HORIZONTAL,length = 300)
        self.slider_testvar.grid(row = 0, column = 0, columnspan = 5)       
        self.testvar.trace('w',self.testfun())    
    def testfun(self):
        print(self.testvar.get())

root = Tk()
root.geometry("1024x768")
app = test(master = root) 
root.mainloop() 

考虑这一行代码:

self.testvar.trace('w',self.testfun())  
这与此完全相同:

result = self.testfun()
self.testvar.trace('w', result)
由于函数返回
None
,跟踪将尝试调用
None
,因此您得到
“NoneType”对象是不可调用的

trace
方法需要一个可调用的。也就是说,对函数的引用。您需要将该行更改为以下内容(注意末尾缺少的
()
):


此外,还需要修改
testfun
,以获取跟踪机制自动传递的参数。有关更多信息,请参见以下代码行:

self.testvar.trace('w',self.testfun())  
这与此完全相同:

result = self.testfun()
self.testvar.trace('w', result)
由于函数返回
None
,跟踪将尝试调用
None
,因此您得到
“NoneType”对象是不可调用的

trace
方法需要一个可调用的。也就是说,对函数的引用。您需要将该行更改为以下内容(注意末尾缺少的
()
):


此外,还需要修改
testfun
,以获取跟踪机制自动传递的参数。有关更多信息,请参见

我无法在Ubuntu 16.04上使用Python 2.7进行复制。一切都适合我。您确定这是您的全部代码吗?请将跟踪更改为
self.testvar.trace('w',self.testfun)
,以防止执行对
def testfun(self,*args)的回调和定义:
以提供多个参数。链接:,.@CommonSense你能在上面的评论中把你的答案作为答案发布吗?所以它可以被“接受”?@CommonSense,非常感谢,你救了我一天。我无法在Ubuntu 16.04上使用Python 2.7复制。一切都适合我。您确定这是您的全部代码吗?请将跟踪更改为
self.testvar.trace('w',self.testfun)
,以防止执行对
def testfun(self,*args)的回调和定义:
以提供多个参数。链接:,.@CommonSense你能在上面的评论中把你的答案作为答案发布吗?所以它可以被“接受”?@常识,非常感谢,你救了我一天。非常感谢much@Bryan奥克利你是耐心的主人。我觉得第三个问题就是这个problem@Jannick:与调用函数而不是提供引用相关的问题肯定很多。问题是,对于初学者来说,这是一个有点难理解的概念。非常感谢much@Bryan奥克利你是耐心的主人。我觉得第三个问题就是这个problem@Jannick:与调用函数而不是提供引用相关的问题肯定很多。问题是,对于初学者来说,这是一个有点难理解的概念。