2014-05-13 155 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()