Python как изменить цвет отдельного квадрата сетки по щелчку мыши - PullRequest
0 голосов
/ 10 июня 2018

Как изменить цвет отдельного квадрата сетки.Эта сетка рисуется поверх изображения.Я рассчитал центральную точку каждого квадрата сетки.Когда пользователь нажимает на определенный квадрат сетки, я получаю центр тяжести этого квадрата (уже реализован).Как я могу изменить цвет квадрата сетки.У меня есть центр тяжести щелкающего квадрата в переменной «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

1 Ответ

0 голосов
/ 10 июня 2018

Вы уже выполнили тяжелую работу, поэтому вам просто нужна простая функция, подобная следующей:

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'
    )

Вместо того, чтобы печатать центроид, вы просто вызовете эту функцию в этот момент.

Джон показал в своем полном коде (удален при редактировании), что холст уже настроен для рисования сетки.Чтобы настроить холст, Джон сделал:

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_x и step_size_y

...