为什么tk.Canvas find_withtag方法的返回值变为空?

时间:2019-09-10 01:34:05

标签: python-3.x canvas tkinter

添加了特定于Canvas中图像对象的相同标签以及附加到该标签的文本对象。如果使用该标签作为参数执行find_withtag方法,则返回值为空。 但是,返回值并不总是为空。

在列表中,可以分别找到带有标签“ 000330208100”和“ 112233445566”的两个对象,但是当“ 112233445566”时find_withtag()返回空。 由于无法从标签正常获取ID,因此即使将标签作为delete方法或move方法的参数,也无法正常工作。

要操作的标签存储在self.drag中。

tag_list = list()
for weight in self.canvas.find_all():
    t = [ (weight,tags) for tags in self.canvas.gettags(weight) if self.drag_obj in tags]
    tag_list.append(t)

print(tag_list)
print(self.canvas.find_withtag(self.drag_obj) )

self.canvas.move(self.drag_obj,dx,dy)

正常回报

[[], [], [], [], [], [], [], [], [], [], [(3, '000330208100')], [(4, '000330208100'), (4, '000330208100name')]]
(3, 4)

异常收益

[[], [], [], [], [], [], [], [], [], [], [], [], [(13, '112233445566')], [(14, '112233445566'), (14, '112233445566name')]]
()

1 个答案:

答案 0 :(得分:0)

不能将整数用作标记值。当您使用看起来像整数的标签,然后在其他画布方法中使用该数字时,画布将假定该值是id而不是标签。

来自canonical documentation of the tk canvas widget

  

每个项目可能还具有与之关联的任何数量的标签。标签只是一个字符串,它可以采用除整数之外的任何形式

     

...

     

在画布小部件命令中指定项目时,如果说明符是整数,则假定它引用具有该ID的单个项目。如果说明符不是整数,则假定引用了画布中所有具有与说明符匹配的标签的项目。