2014-05-13 136 views
-1

我想在我的应用程序中有一个输出帧。当我运行它时,我得到错误:NoneType object has no attribute insertself.widget.insert('end', string)。任何帮助,将不胜感激。在这条线上发生NoneType错误self.widget.insert

import Tkinter as tk 
import sys 

class Test(tk.Tk): 
    def __init__(self): 
     tk.Tk.__init__(self) 
     toolbar = tk.Frame(self).grid() 
     tk.Button(self, text="print to stdout", command=self.print_stdout).grid() 

     self.text= tk.Text(self).grid() 
     sys.stdout= Output(self.text) 


    def print_stdout(self): 
     print "Hello" 
     print "This is test" 

class Output(object): 
    def __init__(self, widget): 
     self.widget = widget 

    def write(self,string): 
     self.widget.insert('end', string) 

app = Test() 
app.mainloop() 

回答

1

您的问题:

self.text= tk.Text(self).grid() 

grid没有明确return什么,所以这是有效地设置self.text = None。然后将该值传递给Output.__init__并最终在write中访问。

把它分成两个步骤来代替:

self.text = tk.Text(self) 
self.text.grid()