我有这个功能:
O(1)
从列表中随机选择:StoreItems []并以随机顺序将其中的5个放在我的画布上。如果我希望我的标签绑定在他们旁边创建文本,我该怎么做?
我有事件功能:
StoreItems = random.sample(set(['sword','pickaxe','toothpick','hammer','torch','saw']), 5)
#Selects 5 Random strings from the list. ^
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), tags=word)
canvas.tag_bind('sword', '<ButtonPress-1>', BuySword)
canvas.tag_bind('pickaxe', '<ButtonPress-1>', BuyPick)
canvas.tag_bind('toothpick', '<ButtonPress-1>', BuyTooth)
canvas.tag_bind('hammer', '<ButtonPress-1>', BuyHammer)
canvas.tag_bind('torch', '<ButtonPress-1>', BuyTorch)
canvas.tag_bind('saw', '<ButtonPress-1>', BuySaw)
但是我希望这个创建文本的位置跟随我列表中相应单词的随机位置。
答案 0 :(得分:1)
您可以使用bbox
method获取tagOrId的位置:
返回一个元组(x1,y1,x2,y2),描述一个矩形,该矩形包含tagOrId指定的所有对象。如果省略该参数,则返回一个包围画布上所有对象的矩形。矩形的左上角是(x1,y1),右下角是(x2,y2)。
虽然因为你正在做相对位置所有你需要的是前两个:
def BuySword(event):
if 'sword' in StoreItems:
x,y,_,_ = canvas.bbox("sword")
relative_position = (x+420,y)
sword = canvas.create_text(relative_position, text="test", fill="White", font=('Anarchistic',40),
anchor=N+W) #the anchor is needed to line up with the north west corner of the original text