2013-02-01 72 views
1

我不知道什么是错的,但我不断收到这个TclError:错误#ARGS错误

Exception in Tkinter callback Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-tk/Tkinter.py", line 1410, in call return self.func(*args) File "/Users/Zane/Desktop/Factorial GUI.py", line 72, in reveal2 self.text2.insert(0.0, message) File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-tk/Tkinter.py", line 2986, in insert self.tk.call((self._w, 'insert', index, chars) + args) TclError: wrong # args: should be ".22186144.22187184 insert index chars ?tagList chars tagList ...?"

这里是我的代码:`

from Tkinter import* 

class App(Frame): 

def fac(self, n): 

    if n >= 0: 
     if n == 1 or n == 0: 
      return 1 
     else: 
      return n*self.fac(n-1) 
    else: 
     print('Error') 

def per(self, n, r): 

    y = (self.fac(n))/self.fac(n - r) 
    print (y) 


def __init__(self, master): 

    Frame.__init__(self,master) 
    self.grid() 
    self.create_widgets() 

def create_widgets(self): 
    self.instruction1 = Label(self, text = "Factorial:") 
    self.instruction1.grid(row = 0, column = 0, columnspan = 1, sticky = W) 

    self.password1 = Entry(self) 
    self.password1.grid(row = 0, column = 1, sticky = W) 

    self.submit_button1 = Button(self, text ="Enter", command = self.reveal1) 
    self.submit_button1.grid(row = 2, column = 0, sticky = W) 

    self.text1 = Text(self, width = 30, height = 1, wrap = WORD) 
    self.text1.grid(row = 3, column = 0, columnspan = 2, sticky = W) 

    self.instruction2 = Label(self, text = "Permutation:") 
    self.instruction2.grid(row = 4, column = 0, columnspan = 1, sticky = W) 

    self.password2 = Entry(self) 
    self.password2.grid(row = 4, column = 1, sticky = W) 

    self.password3 = Entry(self) 
    self.password3.grid(row = 6, column = 1, sticky = W) 

    self.submit_button2 = Button(self, text ="Enter", command = self.reveal2) 
    self.submit_button2.grid(row = 7, column = 0, sticky = W) 

    self.text2 = Text(self, width = 30, height = 1, wrap = WORD) 
    self.text2.grid(row = 8, column = 0, columnspan = 2, sticky = W) 

def reveal1(self): 

    y = int(self.password1.get()) 

    message = self.fac(y) 

    self.text1.delete(0.0, END) 
    self.text1.insert(0.0, message) 

def reveal2(self): 

    y = int(self.password2.get()) 
    z = int(self.password3.get()) 

    message = self.per(y, z) 

    self.text2.delete(0.0, END) 
    self.text2.insert(0.0, message) 


root = Tk() 
root.title('Factorial') 
root.geometry("340x300") 
app = App(root) 

root.mainloop() 

`

+0

此外,当我点击输入按钮(这会产生错误),正确的答案打印在控制台中,但不是在输入框中。 – zlittrell

+0

它应该是无害的,但'0.0'是非法索引;文本小部件索引以1.0开头。 –

回答

6

几乎是唯一的办法得到你说的你发布的代码所带来的错误,如果在要插入的数据是None时调用insert方法。 message来自per的结果,但per返回None,因为您没有明确返回任何其他内容。

尝试调试时首先要尝试的一件事是检查发送给失败函数的数据是否是您认为的数据。您可以通过简单地打印传递给insert消息的值来以非常低的技术方式来完成此操作。这立即告诉我messageNone。一旦我了解到这一点,回答“为什么没有?”这个问题很简单。

+0

恩,但回答问题并不是我想要的。顺便说一下,我自己想清楚了。 – zlittrell

+0

@ zlittrell:我不明白你的评论。我没有回答这个问题。我特别告诉过你问题是什么(每个退货都没有),而且我也告诉你我是如何得出这个结论的。 –

+0

说它返回None没有我要求的,但是,我只是想知道如何解决问题 – zlittrell

相关问题