You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 11:24:17