【问题标题】:Why does the return value from the tk.Canvas find_withtag method become empty?为什么 tk.Canvas find_withtag 方法的返回值变空了?
【发布时间】:2019-09-10 01:34:05
【问题描述】:

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

在列表中,可以分别找到标签为'000330208100'和'112233445566'的两个对象,但是find_withtag()在'112233445566'时返回空。 由于无法从标签中正常获取 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')]]
()

【问题讨论】:

    标签: python-3.x canvas tkinter


    【解决方案1】:

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

    来自canonical documentation of the tk canvas widget

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

    ...

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

    【讨论】:

    • 感谢您的回答。正如你所指出的,我在标签中使用了整数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-02
    • 1970-01-01
    • 2018-02-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多