如何将文本位置与我的画布上随机放置的文本相匹配?

时间:2016-03-31 13:34:32

标签: python-3.x tkinter tk

我有这个功能:

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)

但是我希望这个创建文本的位置跟随我列表中相应单词的随机位置。

1 个答案:

答案 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