Python中如何在if语句内为画布创建的矩形命名为Obj3?
解决Tkinter中创建矩形并命名的问题
嗨,我来帮你搞定这个小问题!你遇到的报错核心是赋值语句的方向搞反了——在Python里,我们是把右边表达式的结果赋值给左边的变量,而不是反过来。
错误原因分析
你写的canvas.create_rectangle(x, y, x + 100, y + 50) = Obj3完全不符合Python语法,应该把变量名放在左边,把创建矩形的函数返回值赋给它。另外还有两个容易踩的小坑要注意:
- 你的绑定函数定义是
creation,但app.bind("<Key>", keyinput)里写的是keyinput,这会导致程序找不到对应函数报错 - 如果后续需要在
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
相关产品推荐
相关产品推荐

