Python _tkinter.TclError:命令名“无效”;。54600176“;错误,发生了什么?

Python _tkinter.TclError:命令名“无效”;。54600176“;错误,发生了什么?,python,python-3.x,tkinter,collision,Python,Python 3.x,Tkinter,Collision,我是python新手,正在尝试编写一个简单的游戏,但在更新主游戏循环后,我不断收到此错误消息 Traceback (most recent call last): File "D:\python shell\Bubble Blaster.py", line 75, in <module> move_bubbles() File "D:\python shell\Bubble Blaster.py", line 67, in move_bubbles c.mo

我是python新手,正在尝试编写一个简单的游戏,但在更新主游戏循环后,我不断收到此错误消息

 Traceback (most recent call last):
  File "D:\python shell\Bubble Blaster.py", line 75, in <module>
    move_bubbles()
  File "D:\python shell\Bubble Blaster.py", line 67, in move_bubbles
    c.move(bub_id[i], -bub_speed[i], 0)
  File **not displaying for privacy**
\lib\tkinter\__init__.py", line 2430, in move
    self.tk.call((self._w, 'move') + args)
_tkinter.TclError: invalid command name ".54600176"
move_bubbles()是第75行

这是:

def move_bubbles():
    for i in range(len(bub_id)):
        c.move(bub_id[i], -bub_speed[i], 0)
def move_气泡():是第67行吗


到目前为止,我创建的“泡泡”是按照它们应该做的那样做的,但是当我试图创建一个碰撞事件,导致泡泡在撞击我创建的潜艇控制器时“弹出”时,我得到了这个错误消息。我已经检查了每一行代码,并将其与我正在使用的教程进行了比较,我没有犯错误,请有人帮助我或解释错误的含义吗?这是一个非常令人沮丧的问题

在Tk中,根窗口名为“.”(点),其子窗口名为父窗口名的点分隔路径。Tkinter使用数字为您生成名称。另一件需要注意的事情是,在Tk中,窗口的名称也是一个命令,用于提供对该窗口的操作。因此,这里的错误告诉您,您的一个窗口不再存在,因为管理它的命令已不存在。我建议您在迭代时修改您的
bub_id
列表,这样您就有可能获得一个在其他地方被破坏的窗口名。您可以使用
c.winfo_exists
来避免错误,它可以让您知道窗口是否确实存在,并且即使窗口已被破坏也可以工作。但实际上,你应该尽量避免在毁坏的窗户上打电话

下面是一个产生相同错误的小示例:

>>> import tkinter as tk
>>> main = tk.Tk()
>>> b = tk.Label(main, text="hello")
>>> b.destroy()
>>> b.configure()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1322, in configure
    return self._configure('configure', cnf, kw)
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1310, in _configure
    return self._getconfigure(_flatten((self._w, cmd)))
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1294, in _getconfigure
    for x in self.tk.splitlist(self.tk.call(*args)):
_tkinter.TclError: invalid command name ".140685140686048"
>>> b.winfo_exists()
0
>>> 
>>将tkinter作为tk导入
>>>main=tk.tk()
>>>b=tk.Label(main,text=“hello”)
>>>b.销毁()
>>>b.配置()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/python3.4/tkinter/_init__.py”,第1322行,在configure中
返回自。_配置('configure',cnf,kw)
文件“/usr/lib/python3.4/tkinter/\uuuu init\uuuuu.py”,第1310行,在配置中
返回self.\u getconfigure(\u flatte((self.\u w,cmd)))
文件“/usr/lib/python3.4/tkinter/_init__.py”,第1294行,在_getconfigure中
对于self.tk.splitlist(self.tk.call(*args))中的x:
_tkinter.TclError:无效的命令名“.140685140686048”
>>>b.winfo_存在()
0
>>> 

从刚刚发布的3.6.0a2开始,tkinter基于小部件类名和序列号(如果容器中有多个实例)创建信息性名称。对于您的代码,我得到:“无效的命令名”。<代码>标签(其中空白是一个后退,因此抑制)。Zelda_01将得到类似于。bubble21的结果,具体取决于实际的气泡类名和弹出的气泡。(使用“
”是为了避免与人们可能生成的名称发生冲突。但是,由于类具有如此多的标记,我正在将我对“
”的建议改为其他内容。)您好,谢谢您的帮助!我使用了c.winfo_exists,并且能够从那里修复我的错误,非常好的建议!
>>> import tkinter as tk
>>> main = tk.Tk()
>>> b = tk.Label(main, text="hello")
>>> b.destroy()
>>> b.configure()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1322, in configure
    return self._configure('configure', cnf, kw)
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1310, in _configure
    return self._getconfigure(_flatten((self._w, cmd)))
  File "/usr/lib/python3.4/tkinter/__init__.py", line 1294, in _getconfigure
    for x in self.tk.splitlist(self.tk.call(*args)):
_tkinter.TclError: invalid command name ".140685140686048"
>>> b.winfo_exists()
0
>>>