обновить экран при изменении цвета пикселя (Python Image и Tkinter) - PullRequest
0 голосов
/ 19 декабря 2018

Я использую Python Image и Tkinder.Я создаю пустое изображение, и я хотел бы, чтобы каждый щелчок по нему пиксел становился красным, но изображение не обновляется.Каков наилучший способ сделать это?

import tkinter as tk
from PIL import Image, ImageTk

# PIL accesses images in Cartesian co-ordinates, so it is Image[columns, rows]
img = Image.new( 'RGB', (500,500), "white") # create a new white image
pixels = img.load() # create the pixel map


window = tk.Tk()
canvas = tk.Canvas(window, width=img.size[0], height=img.size[1])
canvas.pack()
image_tk = ImageTk.PhotoImage(img)
canvas.create_image(img.size[0]//2, img.size[1]//2, image=image_tk)

def mouseClick( event):

    pixels[event.x, event.y]= (255,0,0) #print pixel red

canvas.bind("<Button-1>", mouseClick)

window.mainloop()

1 Ответ

0 голосов
/ 19 декабря 2018

Я ничего не знаю о tkinter , но это, кажется, делает то, что вы хотите - это может быть ужасно, но, возможно, этого будет достаточно, пока не придет кто-то, кто знает лучше ...

#!/usr/bin/env python3

import tkinter as tk
from PIL import Image, ImageTk

# PIL accesses images in Cartesian co-ordinates, so it is Image[columns, rows]
img = Image.new( 'RGB', (500,500), "white") # create a new white image

window = tk.Tk()
canvas = tk.Canvas(window, width=img.size[0], height=img.size[1])
canvas.pack()
image_tk = ImageTk.PhotoImage(img)
canvas.create_image(img.size[0]//2, img.size[1]//2, image=image_tk)

def mouseClick( event):
    x, y = event.x, event.y
    print("x: {}, y: {}".format(x,y))
    # Update image
    img.putpixel((x, y),(255,0,0))
    # Update screen
    canvas.create_oval(x, y, x, y, width = 0, fill = 'red')

canvas.bind("<Button-1>", mouseClick)

window.mainloop()
...