Python 2.7 Tcl错误:错误#args错误

Python 2.7 Tcl错误:错误#args错误,python-2.7,tkinter,Python 2.7,Tkinter,我不知道出了什么问题,但我一直都知道 Tkinter回调中的异常 回溯(最近一次呼叫最后一次): 文件“/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-tk/Tkinter.py”,第1410行,在调用中 返回self.func(*args) reveal2第72行的文件“/Users/Zane/Desktop/Factorial GUI.py” self.text2.insert(0.0,消息) 文件“/L

我不知道出了什么问题,但我一直都知道

Tkinter回调中的异常 回溯(最近一次呼叫最后一次): 文件“/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-tk/Tkinter.py”,第1410行,在调用中 返回self.func(*args) reveal2第72行的文件“/Users/Zane/Desktop/Factorial GUI.py” self.text2.insert(0.0,消息) 文件“/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/lib-tk/Tkinter.py”,插入部分第2986行 self.tk.call((self._w,'insert',index,chars)+args) TclError:错误#args:应为“.22186144.22187184插入索引字符?标记列表字符标记列表…”

这是我的密码:`

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()

`

几乎获得您所说的与发布的代码有关的错误的唯一方法是,当要插入的数据为
None
时调用
insert
方法<代码>消息来自
per
的结果,但是
per
返回
None
,因为您没有显式返回任何其他内容


尝试调试时首先要做的事情之一是检查发送到失败函数的数据是否与您认为的一样。您可以通过打印传递给
insert
消息的值,以非常低的技术实现这一点。这立刻告诉我,
消息
。一旦我了解了这一点,就很容易回答“为什么没有?”

另外,当我按下回车按钮(这会产生错误)时,正确的答案会打印在控制台中,但不会打印在输入框中。这应该是无害的,但是
0.0
是非法索引;文本小部件索引从1.0.Um开始好吧,但用问题回答问题不是我想要的。顺便说一句,我是自己弄明白的。@zlittrell:我不明白你的评论。我没有用问题来回答这个问题。我明确地告诉了你问题是什么(per返回None),我也告诉了你我是如何得出这个结论的。说它返回None不是我想要的,但是,我只是想知道如何修复这个问题problem@zlittrell: ... ? 你说你不知道哪里出了问题,我准确地告诉了你哪里出了问题。我也告诉过你我是怎么知道的。我能说些什么让这个更有用呢?@BryanOakley我也有类似的问题,但是关于
delete
,而不是
insert
self.tk.call(self.\w,'delete',first,last)
。你知道这通常是什么原因吗?我可能不得不开始一个新的线程,但我担心它可能会适得其反。我不能发布我的代码:它很长,有很多模块。我试着用更少的代码行重新创建错误,但我的重新创建工作很好,没有错误。令人困惑