Python如何在鼠标点击时改变网格各个方格的颜色

时间:2018-06-10 04:06:38

标签: python python-2.7 tkinter colors python-imaging-library

如何更改网格的单个方格的颜色。该网格绘制在图像上。我计算了网格每个方格的中心点。当用户点击网格的特定方格时,我得到该方格的质心(已经实现)。如何更改网格方块的颜色。我在变量“nearest_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

1 个答案:

答案 0 :(得分:2)

你已经完成了艰苦的工作,所以你只需要一个简单的功能,如下所示:

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在他的完整代码(在编辑中删除)中显示画布已经设置为绘制网格。为了设置画布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