如何获取画布项目的ID?

时间:2019-11-03 12:35:17

标签: python canvas tkinter id

如果将画布项目存储在变量中,则希望将其存储为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以便以后移动它?

2 个答案:

答案 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)