根据Tk 画布文档 http://www.tcl.tk/man/tcl8.4/TkCmd/canvas.htm#M17:
每个项目还可以具有任意数量的与其关联的标签。一个标签
只是一串字符,它可以采取任何形式,除了
一个整数。例如,x123
还好但是123
isn't…
根据 TkinterCanvas.create_text https://web.archive.org/web/20201105231837id_/http://effbot.org/tkinterbook/canvas.htm#Tkinter.Canvas.create_text-method文档:
tags=
A tag附加到该项目,或a tuple包含多个标签。
也在同一个Tkinter 简介 https://web.archive.org/web/20201105231837id_/http://effbot.org/tkinterbook/, the Tkinter 画布小部件 https://web.archive.org/web/20201108093851id_/http://effbot.org/tkinterbook/canvas.htm部分说:
Tags是附加在项目上的符号名称。标签是普通字符串,它们可以包含除空格(只要它们看起来不像物品手柄).
(斜体强调我的。)
看起来 Tkinter/Tk 转换了tags
如果它不是字符串也不是元组,则参数为字符串。
如何使用字典将标签名称映射到字典:
import tkinter
window = tkinter.Tk()
myCanvas = tkinter.Canvas(window, width = 400, height = 400)
myCanvas.pack()
tag_mapping = {} # <----
tag_mapping['tag1'] = { "id": 1, "name": "test" } # <----
textItemContents = "asdf"
textItem = myCanvas.create_text(1, 1, tags='tag1', text = textItemContents)
searchTags = myCanvas.gettags(textItem)
print(searchTags) # => ('tag1',)
print(searchTags[0]) # => tag1
print(tag_mapping[searchTags[0]]) # => {'name': 'test', 'id': 1}
print(isinstance(tag_mapping[searchTags[0]], dict)) # => True