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

Python中如何在if语句内为画布创建的矩形命名为Obj3?

解决Tkinter中创建矩形并命名的问题

嗨,我来帮你搞定这个小问题!你遇到的报错核心是赋值语句的方向搞反了——在Python里,我们是把右边表达式的结果赋值给左边的变量,而不是反过来。

错误原因分析

你写的canvas.create_rectangle(x, y, x + 100, y + 50) = Obj3完全不符合Python语法,应该把变量名放在左边,把创建矩形的函数返回值赋给它。另外还有两个容易踩的小坑要注意:

  1. 你的绑定函数定义是creation,但app.bind("<Key>", keyinput)里写的是keyinput,这会导致程序找不到对应函数报错
  2. 如果后续需要在creation函数外使用Obj3,需要用global声明它是全局变量,否则它会被当作局部变量处理,函数外无法访问

修正后的代码

import tkinter as tk  # 别忘了导入tkinter模块!

app = tk.Tk()
app.title("VAB")
app.iconbitmap(r"C:\Users\shafa\OneDrive\Documents\VAB\Sprites\VAB-Icon.ico")
w, h = 1200, 800
x, y = w//2, h//2
canvas = tk.Canvas(app, width=w, height=h)
canvas.pack()
Obj1 = canvas.create_rectangle(x, y, x + 100, y + 200)
points = [650, 400, 600, 330, 550, 400]
Obj2 = canvas.create_polygon(points, fill='', width=1, outline='black')

def creation(event):
    global Obj3  # 声明Obj3为全局变量,这样函数外也能访问它
    if event.char == "c":
        # 正确的赋值方式:变量名在左,函数返回值在右
        Obj3 = canvas.create_rectangle(x, y, x + 100, y + 50)

app.bind("<Key>", creation)  # 绑定正确的函数名creation
app.mainloop()

补充说明

  • canvas.create_rectangle()函数会返回一个唯一的数字ID,这个ID就是你赋值给Obj3的内容,后续可以用这个ID对矩形进行各种操作,比如修改颜色:canvas.itemconfig(Obj3, fill="red"),或者移动位置:canvas.move(Obj3, 50, 50)
  • 如果不需要在函数外使用Obj3,可以去掉global Obj3这一行,它会成为函数内的局部变量,不影响创建矩形的功能

内容的提问来源于stack exchange,提问作者Shafay Asghar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 14:17:32