@Twedis

Как рисовать линии в tkinter?

Я хочу рисовать линии в tkinter. Если я быстро рисую с помощью этого кода то между кругами остаётся пространство. Я знаю что мне нужно генерировать линии между этими кругами, но для этого мне нужны предыдущие координаты круга и я не знаю как эти координаты можно получить. Как это можно сделать?
from tkinter import *
root = Tk()
canv = Canvas(bg="white", width=1000,height=1000)  
canv.pack()

def onmotion(event):	
	canv.create_oval((event.x, event.y, event.x+20, event.y+20),  width=0,  fill='black')
	#canv.create_line(?, ?, event.x+10, event.y+10,width=20, fill='black')

canv.bind("<B1-Motion>", onmotion)
root.mainloop()
  • Вопрос задан
  • 2101 просмотр
Решения вопроса 1
@Twedis Автор вопроса
У меня получилось. Правда код написан как попало, но он работает. Ещё более лучших линий можно добиться с помощью smooth (сглаживание линии), но для этого кроме последних и предпоследних координат нужны ещё и препредпоследние координаты
from tkinter import *
root = Tk()
canv = Canvas(bg="white", width=1000,height=1000)  
canv.pack()
def click(event):	
	canv.create_oval((event.x, event.y, event.x+20, event.y+20),  width=0,  fill='black')
	xp = event.x
	yp = event.y
	xp = str(xp)+'\n'
	yp = str(yp)
	f = open('tt.txt','w')
	xp = f.write(xp)
	yp = f.write(yp)
	f.close
	canv.bind("<B1-Motion>", onmotion)
def onmotion(event):
	f = open(r'tt.txt')
	xp = f.readlines()	
	xp[0] = int(xp[0])+10
	xp[1] = int(xp[1])+10	
	f.close
	canv.create_oval((event.x, event.y, event.x+20, event.y+20),  width=0,  fill='black')
	canv.create_line(xp[0], xp[1], event.x+10, event.y+10,width=20, fill='black')
	xp = event.x
	yp = event.y
	xp = str(xp)+'\n'
	yp = str(yp)
	f = open('tt.txt','w')
	xp = f.write(xp)
	yp = f.write(yp)
	f.close	
canv.bind("<Button-1>", click)
root.mainloop()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Roper222
canv.create_line(x1, y1, x2, y2)
Подробнее тут: https://python-scripts.com/tkinter-canvas-example
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы