@karacique

Как удалить линии в Tkinter?

Я пишу программу по построению графиков функций на Tkinter. Мне осталось сделать так, чтобы строились параллельные осям координат линии по нажатию маши, а потом удалялись, когда отжимаешь ЛКМ (примерно как на картинке). 60321c96e181d074905684.png
from tkinter import *
root = Tk()
canv = Canvas(root, width=1000, height=1000, bg="white")
canv.grid()

def b1(event):
	x = event.x
	y = event.y
	canv.create_line(x, 0, x, 1000, width=1, fill='red')
	canv.create_line(0, y, 1000, y, width=1, fill='red')
root.bind('<ButtonPress>', b1)
root.mainloop()


Собственно, линии строятся, но как мне их удалить, после того как они построились?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
@karacique Автор вопроса
Я просто не посмотрел на Stack Overflow, простите. Решение я нашёл, после создания линии ей присваивается некий id, по которому можно позже удалить эту линию.
from tkinter import *
root = Tk()
canv = Canvas(root, width=1000, height=1000, bg="white")
canv.grid()

def b1(event):
  x = event.x
  y = event.y
  canvas_id = canv.create_line(x, 0, x, 1000, width=1, fill='red')
  canvas_id2 = canv.create_line(0, y, 1000, y, width=1, fill='red')
	def b2(event):
		canv.delete(canvas_id)
		canv.delete(canvas_id2)
	root.bind("<ButtonRelease>", b2)
root.bind('<ButtonPress>', b1)
root.mainloop()
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
profesor08
@profesor08
Чтоб что-то с канваса убрать, надо его перерисовать. Это значит, что тебе надо его очистить, и потом заново нарисовать сетку.
Ответ написан
@bmber
Могу ошибаться, но вроде как события на отжатие кнопки в ткинтере не существует.
Такое можно в eel реализовать через js. Там проще и нет ограничений по дизайну и многому чего ещё.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы