如何在Tkinter扫雷游戏中单独识别每个方块?
实现Tkinter扫雷方块的单独选中功能
要实现单个方块的选中功能,你可以通过绑定鼠标点击事件、识别点击的方块并切换其样式来完成。以下是修改后的完整代码:
from tkinter import * import random startX = 0 startY = 0 game = Tk() game.geometry('600x600') game.title('扫雷') canvas = Canvas(game, width=600, height=600, bg='#13cce7') canvas.pack() # 存储所有方块的ID,方便后续操作 tiles = [] for j in range(4): for i in range(4): tile = canvas.create_polygon( startX, startY, startX+150, startY, startX+150, startY+150, startX, startY+150, fill="grey", outline="black", width="5" ) tiles.append(tile) startY += 150 startY = 0 startX += 150 def on_tile_click(event): # 获取点击位置最近的图形ID clicked_item = canvas.find_closest(event.x, event.y)[0] if clicked_item in tiles: # 获取当前方块的填充颜色 current_color = canvas.itemcget(clicked_item, 'fill') # 切换选中状态:选中时用浅灰,未选中时用深灰 new_color = '#cccccc' if current_color == 'grey' else 'grey' canvas.itemconfig(clicked_item, fill=new_color) # 绑定鼠标左键点击事件 canvas.bind('<Button-1>', on_tile_click) game.mainloop()
关键实现说明
- 存储方块ID:用
tiles列表记录所有生成的方块ID,后续可以快速判断点击的图形是否是游戏方块。 - 点击事件绑定:通过
canvas.bind('<Button-1>', on_tile_click)将鼠标左键点击事件关联到处理函数。 - 识别点击方块:
canvas.find_closest(event.x, event.y)能获取点击坐标附近的图形ID,结合tiles列表筛选出有效方块。 - 切换选中样式:通过
itemcget获取当前颜色,itemconfig修改填充色,实现选中/取消选中的视觉反馈。
内容的提问来源于stack exchange,提问作者Nabbster
相关产品推荐
相关产品推荐

