【发布时间】:2016-03-25 19:37:25
【问题描述】:
我有一个清单:
StoreItems = random.sample(set(['sword','pickaxe','toothpick','hammer','torch','saw']), 5)
以及将选择的这 5 个字符串添加到我的画布上并给它们绑定的附加行。
XBASE, YBASE, DISTANCE = 300, 320, 50
for i, word in enumerate(StoreItems):
canvas.create_text(
(XBASE, YBASE + i * DISTANCE),
text=word, activefill="Medium Turquoise", anchor=W, fill="White", font=('Anarchistic',40))
found = canvas.find_closest(XBASE, YBASE)
if found:
canvas.itemconfig(found[0])
canvas.bind('<1>', Buy)
问题是我需要为每个单词分配一个不同的标签绑定,目前它为所有单词提供相同的绑定。所以我不能让点击saw 得到不同的结果,而不是点击toothpick。
【问题讨论】:
-
我了解 tag.binds 的使用,如上面的链接所示。问题出在我列出的示例中,它将列表中的所有项目显示为一个对象。我需要给列表中的每个项目一个单独的标签。当他们在一起时,我不能这样做。
-
...
canvas.tag_bind("sword","<1>",Buy_Sword)大概?如果您需要将参数传递给Buy,那么您可以使用functools.partialfrom functools import partial ; ... canvas.tag_bind(word,"<1>",partial(Buy,word)) -
我从未使用过 functools.partial。你能告诉我这将如何与我上面的内容一起工作吗?在更大的意义上。我的意思是。我有一个 def buy(event) 但我不知道如何让它从一个词中触发。对不起,我有点新手。
-
没关系,每个人都开始一个新手,你有
text=word,你可以在它之后添加tags=word,这样任何带有标签或id的method on the Canvas Widget都可以被赋予它关联的词到。然后查看any of the answers here 以获取额外的参数。我真的不想发布答案,因为这是重复的。祝你好运!
标签: python python-3.x tkinter tk