2017-02-27 78 views
3

對於一個項目,我需要在Python中繪製線條並根據其長度對它們進行着色。例如,如果線條的長度小於畫布長度的25%,則它應該是綠色的。我是Python的新手,所以我不確定如何處理這個問題。我已經設置了線路。他們只需要顏色。任何有用的鏈接都會有幫助如何根據Tkinter的長度創建彩色線條?

這是我的代碼。

class putLine(object): 
     def __init__(mouseClick, frame): 
      mouseClick.frame = frame 
      mouseClick.start_coords = None 
      mouseClick.end_coords = None 
     def __call__(mouseClick, event): 
      coords = event.x, event.y 
      if not mouseClick.start_coords: 
       mouseClick.start_coords = coords 
       return 
      mouseClick.end_coords = coords 
      mouseClick.frame.create_line(mouseClick.start_coords[0], 
            mouseClick.start_coords[1], 
            mouseClick.end_coords[0], 
            mouseClick.end_coords[1]) 
      mouseClick.start_coords = mouseClick.end_coords 
+0

如果您問「如何找到線段的長度?」,我不認爲Tkinter有一個內置的實用程序。你將不得不通過找到你的端點的X和Y值的差異,並將它們插入[畢達哥拉斯定理](https://en.wikipedia.org/wiki/Pythagorean_theorem)中來計算它。 – Kevin

+0

如果你說你已經有了線,你應該考慮添加你的代碼,它會幫助我們幫助你。 – Nicolas

+0

我已經添加了目前爲止的代碼 – Joe

回答

1

您可以計算點之間的距離,如果距離大於寬度的25%,可以將顏色設置爲紅色。

from tkinter import * 
from cmath import polar 



class Lines(Canvas): 

    def __init__(self,master,**kwargs): 

     super(Lines, self).__init__(**kwargs) 
     self.bind("<ButtonPress-1>", self.set_start_vector) 
     self.bind("<ButtonRelease-1>", self.set_end_vector)   


    def set_start_vector(self, event): 

     self.svx, self.svy = (event.x, event.y) 


    def set_end_vector(self, event): 

     self.evx, self.evy = (event.x, event.y) 
     length = polar(complex(self.svx, self.svy)-complex(self.evx, self.evy))[0] 

     if(length < self.winfo_width()*0.25): 
      color = "green" 
     else: 
      color = "red" 

     self.create_line(self.svx, self.svy, self.evx, self.evy, fill=color) 



master = Tk() 

w = Lines(master, 
      width=700, 
      height=400) 
w.pack(expand = YES, fill = BOTH) 

mainloop()