Python ткинтер получи цвет с холста - PullRequest
0 голосов
/ 18 апреля 2020

Я создал простое приложение Tkinter с таким виджетом холста, как это:

from tkinter import *
root = Tk()
root.geometry("500x500-500+500")

canvas = Canvas(root, width = 400, height = 400, bg = "white")
canvas.pack()

canvas.create_line(0, 0, 200, 100, width = 20, fill = "black")

root.mainloop()

Мой вопрос: как мне получить цвет холста в указанной позиции c? Скажем, например, что я щелкнул где-то в строке, как я могу вернуть цвет «черный» из этого?

Другими словами, если бы я хотел такую ​​функцию,

def getColor(cnvs, event = None):
   x = event.x
   y = event.y
   # somehow gets the color of cnvs at position (x, y) and stores it as color
   return color

как бы я go сделал это?

1 Ответ

1 голос
/ 18 апреля 2020

Вы можете сделать снимок экрана холста с помощью модуля Pillow.ImageGrab и получить требуемый цвет пикселя из снимка:

from PIL import ImageGrab

def get_color(cnvs, event):
    x, y = cnvs.winfo_rootx()+event.x, cnvs.winfo_rooty()+event.y
    # x, y = cnvs.winfo_pointerx(), cnvs.winfo_pointery()
    image = ImageGrab.grab((x, y, x+1, y+1)) # 1 pixel image
    return image.getpixel((0, 0))

Обратите внимание, что возвращаемый цвет - (R, G, B) формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...