简体   繁体   English

需要帮助理解python中的错误文本:

[英]Need help understanding this error text in python:

Ok so basically I wrote a not very pretty GUI that gives random simple math questions. 好吧基本上我写了一个不太漂亮的GUI,提供随机简单的数学问题。 It works just like I want it to. 它就像我想要的那样工作。 However the idle Shell spits out red at me every time I click enter. 然而,每次我点击进入时,闲置的Shell会向我吐出红色。 Despite that, like I said, it continues to function as I want it to. 尽管如此,就像我说的那样,它继续按照我的意愿运作。 So I'm having trouble understanding why this specific part of my code is causing problems. 所以我无法理解为什么我的代码的这个特定部分会导致问题。 Apologies for the long section of code: 为长段代码道歉:

from tkinter import Label, Frame, Entry, Button, LEFT, RIGHT, END
from tkinter.messagebox import showinfo
import random

class Ed(Frame):
    'Simple arithmetic education app'
    def __init__(self,parent=None):
        'constructor'
        Frame.__init__(self, parent)
        self.pack()
        self.tries = 0
        Ed.make_widgets(self)
        Ed.new_problem(self)

    def make_widgets(self):
        'defines Ed widgets'
        self.entry1 = Entry(self, width=20, bg="gray", fg ="black")
        self.entry1.grid(row=0, column=0, columnspan=4)
        self.entry1.pack(side = LEFT)
        self.entry2 = Entry(self, width=20, bg="gray", fg ="black")
        self.entry2.grid(row=2, column=2, columnspan=4)
        self.entry2.pack(side = LEFT)
        Button(self,text="ENTER", command=self.evaluate).pack(side = RIGHT)

    def new_problem(self):
        'creates new arithmetic problem'
        opList = ["+", "-"]
        a = random.randrange(10+1)
        b = random.randrange(10+1)
        op = random.choice(opList)
        if b > a:
            op = "+"
        self.entry1.insert(END, a)
        self.entry1.insert(END, op)
        self.entry1.insert(END, b)


    def evaluate(self):
        'handles button "Enter" clicks by comparing answer in entry to correct result'
        result = eval(self.entry1.get())
        if result == eval(self.entry2.get()):
            self.tries += 1
            showinfo(title="Huzzah!", message="That's correct! Way to go! You got it in {} tries.".format(self.tries))
            self.entry1.delete(0, END)
            self.entry2.delete(0, END)
            self.entry1.insert(END, self.new_problem())
        else:
            self.tries += 1
            self.entry2.delete(0, END)

This is the message I get: 这是我收到的消息:

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python32\lib\tkinter\__init__.py", line 1399, in __call__
    return self.func(*args)
  File "C:\Python32\Python shit\csc242hw4\csc242hw4.py", line 55, in evaluate
    self.entry1.insert(END, self.new_problem())
  File "C:\Python32\lib\tkinter\__init__.py", line 2385, in insert
    self.tk.call(self._w, 'insert', index, string)
_tkinter.TclError: wrong # args: should be ".52882960.52883240 insert index text"

The error message says that Tkinter thinks it's getting the wrong number of args. 错误消息说Tkinter认为它的args数量错误。

Looking further back in the traceback we see this line caused the error: 回顾一下追溯,我们看到这一行引起了错误:

File "C:\Python32\Python shit\csc242hw4\csc242hw4.py", line 55, in evaluate
    self.entry1.insert(END, self.new_problem())

But that seems like the right number of arguments! 但这似乎是正确数量的论点! So what's going on? 发生什么了?

The problem is that self.new_problem() returns None . 问题是self.new_problem()返回None It looks like Python's wrapper around Tkinter doesn't pass on the argument when it is None . 它看起来像Python的周围Tkinter的包装上不争论过程,当其None

To fix this get rid of the call to insert and change line 55 to 要解决此问题,请不要再insert和更改第55行的调用

self.new_problem()

This works because you are already calling self.entry.insert from inside new_problem . 这工作,因为你已经调用self.entry.insert从内new_problem

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM