Пара вещей:
Вы должны импортировать Tkinter только один раз. Если вы импортируете его как "tk", ваш код будет легче понять.
Если вы установите разные цвета для разных виджетов, будет легко увидеть, находятся ли они там, где вы хотите их видеть.
Когда вы помещаете изображение на холст, вы помещаете его в положение 500, 500, которое находится в правом нижнем углу. Якорь по умолчанию находится в центре изображения. Это приводит к тому, что вы видите только верхнюю левую 1/4 изображения, как указывает Брайан.
Я изменил положение изображения на (0,0) и назначил верхний левый угол ('nw') в качестве якоря. Также canvas highlightthickness=0
удаляет 2-пиксельную рамку выделения с холста. Изображение state='normal'
является значением по умолчанию.
Наконец, я сделал пометку на изображении чуть больше, чтобы ее было легче увидеть. И я настроил звонок на mainloop()
Изображение обновляется автоматически, теперь, когда оно находится в правильном положении.
import tkinter as tk
class Paint():
def __init__(self):
self.window = tk.Tk()
self.sizex = 500
self.sizey = 500
self.canvas = tk.Canvas(self.window, width=self.sizex,
height=self.sizey, highlightthickness=0)
# Set canvas background color so you can see it
self.canvas.config(bg="thistle")
self.canvas.pack()
self.img = tk.PhotoImage(width=self.sizex, height=self.sizey)
self.canvas.create_image((0,0), image=self.img, state="normal",
anchor='nw')
# Set image color so you can see it
self.img.put('khaki',to=(0, 0, self.sizex, self.sizey))
self.canvas.bind("<Button-1>",self.color_in)
def color_in(self, event):
# Paint a 2x2 square at the mouse position on image
x, y = event.x, event.y
self.img.put("black", to=(x-2, y-2, x+2, y+2))
paint = Paint()
paint.window.mainloop()