2015-05-06 2 views
0

у меня есть этот код, в котором пользователь может рисовать используя свою мышь:Tkinter: сохранить координаты нарисованной линии заданной ширины

from Tkinter import * 

class Test: 
    def __init__(self): 
     self.b1="up" 
     self.xold=None 
     self.yold=None 
    def test(self,obj): 
     self.drawingArea=Canvas(obj) 
     self.drawingArea.pack() 
     self.drawingArea.bind("<Motion>",self.motion) 
     self.drawingArea.bind("<ButtonPress-1>",self.b1down) 
     self.drawingArea.bind("<ButtonRelease-1>",self.b1up) 
    def b1down(self,event): 
     self.b1="down" 
    def b1up(self,event): 
     self.b1="up" 
     self.xold=None 
     self.yold=None 
    def motion(self,event): 
     if self.b1=="down": 
      if self.xold is not None and self.yold is not None: 
       event.widget.create_line(self.xold,self.yold,event.x,event.y,fill="red",width=4,smooth=TRUE) 
      self.xold=event.x 
      self.yold=event.y 


if __name__=="__main__": 
    root=Tk() 
    root.wm_title("Test") 
    v=Test() 
    v.test(root) 
    root.mainloop() 

Интересно, как сохранить координаты нарисованной линии зная, что толщина линии равна 4 (ширина может быть любым целым числом менее 10)?

Без опции толщины ответ очевиден для меня.

Заранее спасибо.

+0

Что именно вы подразумеваете под «координатами нарисованной линии»? Вы хотите, чтобы вы выбрали координаты всех пикселов? Также может помочь показать «очевидный» ответ без опции толщины. – fhdrsdg

+0

@fhdrsdg теперь я изо всех сил пытаюсь получить координаты пойнтов, только если толщина 1 (по умолчанию) :(Не так очевидно, как я думал –

+0

Вот что я подумал, и именно поэтому я спросил. Что вы хотите сделать с координатами, хотя? Если вы хотите нарисовать те же строки на изображении, вы можете попробовать [ImageDraw module] (http://effbot.org/imagingbook/imagedraw.htm#tag-ImageDraw.Draw.line) в PIL. Если вы хотите их по любой другой причине, также может быть лучший способ сделать это, чем пытаться найти все координаты. – fhdrsdg

ответ

1

Вы не можете получить нужную информацию, если вы хотите, это список всех пикселей, которые меняются при рисовании широкой строки. Единственная информация, которую вы получаете при создании строки на холсте, - это координаты конечных точек.

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

+0

Хорошо, спасибо. Является ли этот ответ действительным, даже когда толщина 1 (по умолчанию)? –

+0

@ Наккини: да. Независимо от толщины, все, о чем вы можете узнать, это конечные точки или ограничивающий прямоугольник, если линия горизонтальная или вертикальная. –

Смежные вопросы