Tkinter代码出现width未定义错误,已定义变量仍报错求解决
你的Tkinter代码错误分析与修复
1. 核心错误:width/height未定义
你在创建Canvas组件时使用了width=width, height=height,但这两个变量是在Canvas创建之后才赋值的。Python代码是从上到下顺序执行的,此时width和height还未被定义,因此直接抛出未定义错误。
修复方法:将width, height=200,200移到创建Canvas的代码之前。
2. 其他代码问题及修复
create_circle方法不存在:Tkinter的Canvas组件没有create_circle方法,要绘制圆形需使用create_oval,传入圆形左上角和右下角的坐标(例如(100,100,300,300)对应中心在(200,200)、半径100的圆)。yellow未加引号:颜色值是字符串类型,需要用单引号或双引号包裹,改为'yellow'。- 绑定事件为空:你给
root.bind()传入的事件参数是空字符串,无法监听按键,需改为<Key>来监听所有键盘按键事件。 - 笔误:
10,0w:处理d按键的代码里多了个无效字符w,应改为10,0。 - 冗余的
-0:处理s按键的-0无意义,直接写0,10即可。 - 未实现图形移动:你的
pressed函数计算了偏移量,但没有调用canvas.move()来实际移动图形。
修复后的完整代码
from tkinter import * import random root = Tk() root.geometry("400x400") # 先定义width和height,再创建Canvas width, height = 200, 200 canvas = Canvas(root, width=width, height=height, bg='black') canvas.pack(pady=20) # 用create_oval绘制圆形,参数为左上角和右下角坐标 shape = canvas.create_oval(100, 100, 300, 300, fill='yellow') def pressed(event): x, y = 0, 0 if event.char == "a": x, y = -10, 0 if event.char == "d": x, y = 10, 0 if event.char == "w": x, y = 0, -10 if event.char == "s": x, y = 0, 10 # 调用move方法移动图形 canvas.move(shape, x, y) # 绑定键盘按键事件 root.bind("<Key>", pressed) root.mainloop()
内容的提问来源于stack exchange,提问作者nev nev
相关产品推荐
相关产品推荐

