Python 如何在kivy中确定线的长度

Python 如何在kivy中确定线的长度,python,kivy,line,Python,Kivy,Line,大家都知道,kivy线使用(x1,y1.x2,y2,x3,y3)获取点。我想创建一个几何罗盘,就像它在中一样。考虑到这里的罗盘,我创建了一个基本框架,但似乎还不够好。。(虽然与那里的罗盘并不匹配,但这只是基本概念) 它只是一个框架,但这里唯一的问题是直线的长度没有固定下来,这意味着它会因为x3,y3而不断变化。有没有办法固定这条线的长度,这样在任何情况下它的长度都不会被修改,但它仍然可以改变它的位置 或者除了circle小部件之外,还有其他更好的小部件吗?我希望用户能够创建曲线、圆弧以及圆,因此

大家都知道,kivy线使用
(x1,y1.x2,y2,x3,y3)
获取点。我想创建一个几何罗盘,就像它在中一样。考虑到这里的罗盘,我创建了一个基本框架,但似乎还不够好。。(虽然与那里的罗盘并不匹配,但这只是基本概念)

它只是一个框架,但这里唯一的问题是直线的长度没有固定下来,这意味着它会因为
x3,y3
而不断变化。有没有办法固定这条线的长度,这样在任何情况下它的长度都不会被修改,但它仍然可以改变它的位置


或者除了circle小部件之外,还有其他更好的小部件吗?我希望用户能够创建曲线、圆弧以及圆,因此不能切换到“圆”小部件。用户应该能够像使用几何罗盘一样使用它,因为您可以看到提供的链接。

我不理解这个问题-您想更改直线的点,但不想更改其长度?你能确切地解释一下你想要实现什么吗?兄弟,我实际上想创建一个几何罗盘来创建圆、圆弧、曲线等。这里的问题是没有好的小部件可以使用。因此,我发现提供的代码基本上有两行。一行是
直线
,另一行是
自由行
。这样我就可以画一条曲线,圆弧或圆。保持直线的距离不变,这是可以实现的。这里的优点是,如果我们可以保持直线的长度,并且可以改变它的位置(我想要实现),那么自由手线就可以画出我想要的完美的圆或曲线。。所以问题是我想固定直线的长度,同时可以改变直线的位置。如果我理解正确,你应该使用触摸位置来计算你关心的点相对于你想移动的点的角度,并在这个方向上画一条固定长度的线。这是如何实现的?
import kivy
from kivy.uix.widget import Widget
from kivy.uix.widget import Canvas
from kivy.graphics import Color
from kivy.graphics import Line
from kivy.uix.floatlayout import FloatLayout
from kivymd.app import MDApp
from kivy.uix.button import Button
from kivymd.uix.card import MDCard

class Main(FloatLayout):


    def __init__(self,**kwargs):
        super(Main, self).__init__(**kwargs)



        self.my_widget = Widget(size_hint= (0.6,0.6),pos_hint = {'x':0.5,'top' : 0.8})
        self.add_widget(self.my_widget)

        with self.my_widget.canvas:
            Color(rgba = (0,0,0,1))

        def on_touch_downah(self,touch):

            self.line = Line(points = (touch.x,touch.y),width = 4)
            self.canvas.add(self.line)

        def on_touch_moveah(self,touch):
            self.line.points += touch.x,touch.y

        self.my_widget.bind(on_touch_down=on_touch_downah)
        self.my_widget.bind(on_touch_move=on_touch_moveah)

        def on_touch_downeh(self, touch):
            self.x_ = touch.x
            self.y_ = touch.y
            self.lines = Line(points=(touch.x,touch.y),width = 5)
            self.canvas.add(self.lines)

        def on_touch_moveeh(self, touch):
            self.x2 = self.x_ + 0.1
            self.y2 = self.y_ + 0.1
            self.lines.points = (self.x_,self.y_,touch.x,touch.y,touch.x,touch.y)

        self.my_widget.bind(on_touch_down=on_touch_downeh)
        self.my_widget.bind(on_touch_move=on_touch_moveeh)


class Mysapp(MDApp):
    def build(self):
        return Main()

Mysapp().run()