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

у заполнить прямоугольники, как в краске. Когда нажата кнопка мыши, я хочу, чтобы каждый прямоугольник, который я ввожу, был заполнен, и в противном случае я не хочу, чтобы событие происходило.

Вот мой код:

from tkinter import Canvas
import tkinter

_width = 50
_height = 50
_size = 8

root = tkinter.Tk()
root.title("draw me a lovely matrix")
canv = Canvas(root, width=_width * _size, height=_height * _size)


class Wrapper:
    btn1d = False


def set_btn1d(value):
    print(value)
    Wrapper.btn1d = value


def toggle_color(rect):
    print('called')
    if Wrapper.btn1d:
        color = canv.itemcget(rect, 'fill')
        canv.itemconfig(rect, fill=("#aaa" if color == '#fff' else '#fff'))


rects = []
canv.bind('<ButtonPress-1>', lambda e, value=True: set_btn1d(value))
canv.bind('<ButtonRelease-1>', lambda e, value=False: set_btn1d(value))
for i in range(_size):
    for j in range(_size):
        rect = canv.create_rectangle(_width * j, _height * i, _width * (j + 1), _height * (i + 1), fill="#fff", width=0)
        rects.append(rect)
        canv.tag_bind(rect, '<Enter>', lambda e, rect=rect: toggle_color(rect))

canv.pack()
root.mainloop()

Проблема в том, что когда я нажимаю кнопку мыши, только ячейка, в которой была нажата мышь, обнаруживает вход указателя мыши (также та, в которой мышь будет отпущена в конце)

Любые полезные общие советы о моем коде, конечно, будут высоко оценены.

 Nae22 дек. 2017 г., 18:47
Обратите внимание, что он не регистрируется<Enter> ввсе времена, когда левый клик нажимается.
 yukashima huksay22 дек. 2017 г., 19:23
так что мне теперь делать? есть ли обходной путь?
 Hippolippo01 февр. 2018 г., 23:56
Это не то, как вы бы это делали на самом деле, вы бы сделали функцию, которая будет вызываться с помощью enter, которая получит прямоугольник, к которому она прикасается, и заполнит его, если вы пытаетесь это сделать.
 Nae24 дек. 2017 г., 15:06
Это просит<B1-Enter> похожий на<B1-Motion> но, кажется, не существует.
 Nae22 дек. 2017 г., 20:15
Вы можете использоватьfind_closest как обходной путь.

Ответы на вопрос(0)

Ваш ответ на вопрос