如何用Tkinter创建基于长度的彩色线条?

2024-09-28 22:28:25 发布

您现在位置:Python中文网/ 问答频道 /正文

对于一个项目,我需要在Python中绘制线条,并根据其长度对其进行着色。例如,如果线条的长度小于画布长度的25%,那么它应该是绿色的。我是Python新手,所以我不太确定如何处理这个问题。我已经安排好了。他们只需要颜色。任何有用的链接都会有帮助。在

这是我的密码。在

    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

Tags: 项目noneeventdef画布绘制coordsframe
1条回答
网友
1楼 · 发布于 2024-09-28 22:28:25

可以计算点之间的距离,如果距离大于宽度的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()

相关问题 更多 >