我正在将我编写的游戏移植到用户友好的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没有。我确信(我认为......)标签已正确分配。
有人关心帮我吗?提前致谢。
答案 0 :(得分:0)
绑定到矩形时,单击属于矩形的其中一个像素时会触发事件。由于您使用的是fill=""
,因此矩形的内部没有像素。如果将鼠标放在边框上,代码实际上是有效的。
如果您希望能够点击它们,您应该为矩形添加填充颜色。或者,您可以向画布添加一个绑定,然后使用画布的功能来查找最接近点击的对象。
此外,如果您打算为每个矩形添加绑定,则需要在循环内移动tag_bind
。