如果将画布项目存储在变量中,则希望将其存储为tkinter.rectangle对象,以后可以使用。
rec = can.create_rectangle(l, fill="blue")
但是存储为整数<< class'int'>>
from tkinter import Tk, Canvas, Button
def press(canv, rect):
print("pressed")
canv.move(rect, 10)
l = [50,100,100,200]
root = Tk()
can = Canvas(root)
can.pack()
rec = can.create_rectangle(l, fill="blue")
print("rec",rec) #1
print("type(rec) ", type(rec)) #<class 'int'>
b = Button(root, text="NOTHING", command=lambda:press(can, rec))
b.pack()
print("type(b) = ",type(b)) #<class 'tkinter.Button'>
print("b = ",b) #TCL id like .41549040
root.mainloop()
运行此代码时,它将返回错误:
_tkinter.TclError: wrong # args: should be ".21823184 move tagOrId xAmount yAmount"
为什么它是整数类型,以及如何获取画布项目的ID以便以后移动它?
答案 0 :(得分:0)
如果我将画布项目存储在变量中,我希望将其存储为tkinter.rectangle对象
那是一个错误的期望。记录的行为是它返回一个整数id。
为什么它是整数类型,以及如何获取画布项目的ID以便以后移动它?
除create_rectangle
方法返回的整数外,没有其他ID。您可以使用此ID来移动项目。
运行此代码时,它将返回错误:
_tkinter.TclError: wrong # args: should be ".21823184 move tagOrId xAmount yAmount"
该错误消息告诉您确切的错误原因:wrong # args
。您必须提供ID,以及xAmount和yAmount。您只提供了id和xAmount。
答案 1 :(得分:0)
解决方案很简单:您不给Y值起作用。 该功能需要:
canv.move(item, x, y)
如果只需要在x轴上移动它,则必须编写以下字符串:
canv.move(rect, 10, 0)