недавно я нашел этот фрагмент кода здесь (Как нарисовать линию по координатам мыши с помощью tkinter?):
import tkinter as tk
def draw(event):
x, y = event.x, event.y
if canvas.old_coords:
x1, y1 = canvas.old_coords
canvas.create_line(x, y, x1, y1)
canvas.old_coords = x, y
def draw_line(event):
if str(event.type) == 'ButtonPress':
canvas.old_coords = event.x, event.y
elif str(event.type) == 'ButtonRelease':
x, y = event.x, event.y
x1, y1 = canvas.old_coords
canvas.create_line(x, y, x1, y1)
def reset_coords(event):
canvas.old_coords = None
root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()
canvas.old_coords = None
root.bind('<ButtonPress-1>', draw_line)
root.bind('<ButtonRelease-1>', draw_line)
#root.bind('<B1-Motion>', draw)
#root.bind('<ButtonRelease-1>', reset_coords)
root.mainloop()
и мне действительно любопытно, как заставить эти функции работать соответственно, например. выбранный вариант. Скажем, я хотел бы выбрать, когда рисовать от руки и когда рисовать линии. Я попытался использовать одно целое число для сравнения, а затем определить условия для привязки, например:
if c==1:
root.bind('<ButtonPress-1>', draw_line)
root.bind('<ButtonRelease-1>', draw_line)
elif c==2:
root.bind('<B1-Motion>', draw)
root.bind('<ButtonRelease-1>', reset_coords)
но, похоже, это не работает. У Вас есть идеи, как создать условия для связывания?
c
и вызвать соответствующую функцию. - person Alon Alexander   schedule 30.04.2018draw_general
. Затем вместо выполнения root.bind наdraw_line
сделайте это наdraw_general
. Затем в этой функции проверьте значениеc
. Если это 1 вызовdraw_line
и если это 2 вызовdraw
. Проблема в том, что привязка происходит один раз, а не после каждого срабатывания, поэтому вы должны привязываться один раз, а затем обрабатывать свои случаи в обратном вызове (в моем примереdraw_general
. Надеюсь, это поможет - person Alon Alexander   schedule 30.04.2018