我收到以下错误:
_tkinter.TclError:命令名称无效“.14574424”
我无法理解错误。我做错了什么?
# Import tkinter
from tkinter import *
class AnimationDemo:
def __init__(self):
window = Tk() # Create a window
window.title("Animation Demo") # Set a title
width = 250 # Width of the canvas
canvas = Canvas(window, bg = "white", width = 250, height = 50)
canvas.pack()
x = 0 # Starting x position
canvas.create_text(x, 30, text = "Message moving?", tags = "text")
dx = 3
while True:
canvas.move("text", dx, 0) # Move text dx unit
canvas.after(100) # Sleep for 100 milliseconds
canvas.update() # Update canvas
if x < width:
x += dx # Get the current position for string
else:
x = 0 # Reset string position to the beginning
canvas.delete("text")
# Redraw text at the beginning
canvas.create_text(x, 30, text = "Message moving?", tags = "text")
window.mainloop() # Create an event loop
AnimationDemo() # Create GUI
答案 0 :(得分:1)
正如Bryan所提到的,不是使用while
循环,而是尝试使用.after()
方法直接为文本制作动画:
import tkinter as tk
class AnimationDemo:
def __init__(self):
self.window = tk.Tk()
self.window.title("Animation Demo")
# Create a canvas
self.width = 250
self.canvas = tk.Canvas(self.window, bg="white", width=self.width,
height=50)
self.canvas.pack()
# Create a text on the canvas
self.x = 0
self.canvas.create_text(self.x, 30, text = "Message moving?", tags="text")
self.dx = 3
# Start animation & launch GUI
self.animate_text()
self.window.mainloop()
def animate_text(self):
# Move text dx unit
self.canvas.move("text", self.dx, 0)
if self.x < self.width:
# Get the current position for string
self.x += self.dx
else:
# Reset string position to the beginning
self.x = 0
self.canvas.delete("text")
self.canvas.create_text(self.x, 30, text = "Message moving?", tags="text")
self.window.after(100, self.animate_text)
# Create GUI
AnimationDemo()