2017-02-27 6 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値の差を求め、それらを[Pythagorean Theorem](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() 
関連する問題