python tclerror__tkinter.TclError:命令名称无效" .4302957584" (_tkinter.TclError: invalid command name ".4...

这篇博客介绍了在关闭一个使用 tkinter 编写的 Python 程序时遇到的 _tkinter.TclError:invalid command name 错误。作者展示了程序代码,包括创建一个弹跳球动画的类,以及错误发生时的完整堆栈跟踪。错误出现在尝试删除 canvas 上的元素时,可能由于对象引用问题导致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2013-04-17 12:09:25

0

When closing the python 3 program, I get a strange exception in the console.

The Python 3 code:

from tkinter import *

from random import randint

# Return a random color string in the form of #RRGGBB

def getRandomColor():

color = "#"

for j in range(6):

color += toHexChar(randint(0, 15)) # Add a random digit

return color

# Convert an integer to a single hex digit in a character

def toHexChar(hexValue):

if 0 <= hexValue <= 9:

return chr(hexValue + ord('0'))

else: # 10 <= hexValue <= 15

return chr(hexValue - 10 + ord('A'))

# Define a Ball class

class Ball:

def __init__(self):

self.x = 0 # Starting center position

self.y = 0

self.dx = 2 # Move right by default

self.dy = 2 # Move down by default

self.radius = 3

self.color = getRandomColor()

class BounceBalls:

def __init__(self):

self.ballList = [] # Create a list for balls

window = Tk()

window.title("Bouncing Balls")

### Create Canvas ###

self.width = 350

self.height = 150

self.canvas = Canvas(window, bg = "white", width = self.width, height = self.height)

self.canvas.pack()

### Create Buttons ###

frame = Frame(window)

frame.pack()

btStop = Button(frame, text = "Stop", command = self.stop)

btStop.pack(side = LEFT)

btResume = Button(frame, text = "Resume", command = self.resume)

btResume.pack(side = LEFT)

btAdd = Button(frame, text = "Add", command = self.add)

btAdd.pack(side = LEFT)

btRemove = Button(frame, text = "Remove", command = self.remove)

btRemove.pack(side = LEFT)

self.sleepTime = 20

self.isStopped = False

self.animate()

window.mainloop()

def stop(self): # Stop animation

self.isStopped = True

def resume(self):

self.isStopped = False

self.animate()

def add(self): # Add a new ball

self.ballList.append(Ball())

def remove(self):

self.ballList.pop()

def animate(self):

while not self.isStopped:

self.canvas.after(self.sleepTime)

self.canvas.update()

self.canvas.delete("ball")

for ball in self.ballList:

self.redisplayBall(ball)

def redisplayBall(self, ball):

if ball.x > self.width or ball.x < 0:

ball.dx = -ball.dx

if ball.y > self.height or ball.y < 0:

ball.dy = -ball.dy

ball.x += ball.dx

ball.y += ball.dy

self.canvas.create_oval(ball.x - ball.radius, ball.y - ball.radius, \

ball.x + ball.radius, ball.y + ball.radius, \

fill = ball.color, tags = "ball")

BounceBalls()

Here's the full Traceback:

/Library/Frameworks/Python.framework/Versions/3.3/bin/python3 "/Users/narek_a/Dropbox/Python/PycharmProjects/Introduction to Programming/Chapter 10.py"

Traceback (most recent call last):

File "/Users/narek_a/Dropbox/Python/PycharmProjects/Introduction to Programming/Chapter 10.py", line 446, in

BounceBalls()

File "/Users/narek_a/Dropbox/Python/PycharmProjects/Introduction to Programming/Chapter 10.py", line 407, in __init__

self.animate()

File "/Users/narek_a/Dropbox/Python/PycharmProjects/Introduction to Programming/Chapter 10.py", line 428, in animate

self.canvas.delete("ball")

File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/tkinter/__init__.py", line 2344, in delete

self.tk.call((self._w, 'delete') + args)

_tkinter.TclError: invalid command name ".4302957584"

Process finished with exit code 1

Why are these exceptions caused?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值