Python如何在鼠标单击时更改网格单个正方形的颜色



如何更改网格单个正方形的颜色。此网格绘制在图像上。我计算了网格每个正方形的中心点。当用户单击网格的特定正方形时,我会得到该正方形的质心(已实现(。如何更改网格正方形的颜色。我在变量"closest_centroid"中有点击正方形的质心。

# Get closes centroid
def closest_node(node, nodes):
nodes = np.asarray(nodes)
dist = np.sum((nodes - node)**2, axis=1)
return np.argmin(dist)
# print co-ordinate function
def get_coords(event):
mouse_xy = (event.x, event.y)
closest_centroid = centers[closest_node(mouse_xy, centers)]
print(closest_centroid)

我的想法是更改网格的单击正方形中包含的图像像素的颜色。

我的库是:

import math
from Tkinter import *
from PIL import Image, ImageDraw
import numpy as np

您已经完成了艰苦的工作,因此您只需要一个简单的函数,如下所示:

def change_color(center):
step = step_size/2
center_x, center_y = center
canvas.create_rectangle(
[
center_x - step, 
center_y - step, 
center_x + step, 
center_y + step
], 
fill='red'
)

此时只需调用此函数,而不是打印质心。

John 在他的完整代码(在编辑中删除(中展示了画布已经设置为绘制网格。为了设置画布,约翰做到了:

filename = ImageTk.PhotoImage(img)
canvas = tk.Canvas(root,height=img.size[0],width=img.size[0])
canvas.image = filename
canvas.create_image(0,0,anchor='nw',image=filename)
canvas.pack()

此外,他还step_size为:

step_size = int(img.width / step_count)

如果图像不是正方形的,则需要step_size_xstep_size_y

最新更新