为什么我的画布项目没有正确绑定?

时间:2015-12-03 21:12:42

标签: python python-3.x tkinter

我正在将我编写的游戏移植到用户友好的GUI中。请耐心等待,因为这是我第一次玩tkinter。

一旦玩家输入了他想玩的行数/列数,我们就会绘制游戏板。

如果您查看以下代码,就会看到我为我们创建的每个广场分配了标签,格式为' row,col'

我将.tag_bind调用到位于第0行第3列的方块。单击时,它应该调用_on_canvas_clicked函数。但是,当我运行该程序时,当我点击该正方形时,它不响应或做任何事情。

    gameframe = tkinter.Frame(master = self._dialog_window)
    gameframe.grid(row = 2, column = 0, columnspan = 2, padx = 10, pady = 10, sticky = tkinter.W)

    boardWidth = cols * self._sqheight
    boardHeight = rows * self._sqheight
    self.gameboard = Canvas(gameframe, width = boardWidth, height = boardHeight, bg = 'green')
    self.gameboard.grid(row = 0, column = 0)

    for row in range(rows):
        for col in range(cols):
            top = row * self._sqheight
            left = col * self._sqheight
            bottom = row * self._sqheight + self._sqheight -1
            right = col * self._sqheight + self._sqheight -1
            rect = self.gameboard.create_rectangle(left,top,right,bottom,outline='gray',fill='',tags="(row, col)")
            self.gameboard.itemconfig(rect, tags='{},{}'.format(row, col))

    self.gameboard.tag_bind('0,3', '<ButtonPress-1>', self._on_canvas_clicked)

self.gameboard.bind('<Button-1>', self._on_canvas_clicked)按预期工作。但是tag_bind没有。我确信(我认为......)标签已正确分配。

有人关心帮我吗?提前致谢。

1 个答案:

答案 0 :(得分:0)

绑定到矩形时,单击属于矩形的其中一个像素时会触发事件。由于您使用的是fill="",因此矩形的内部没有像素。如果将鼠标放在边框上,代码实际上是有效的。

如果您希望能够点击它们,您应该为矩形添加填充颜色。或者,您可以向画布添加一个绑定,然后使用画布的功能来查找最接近点击的对象。

此外,如果您打算为每个矩形添加绑定,则需要在循环内移动tag_bind