绘制半径等于在另一个小部件类上绘制的滑块的值的圆

时间:2019-07-03 06:40:51

标签: python python-3.x kivy kivy-language

我已经在我的应用程序中包含了绘制圆圈的功能。但是,圆的半径和圆弧长度由滑块值确定。我希望在不同的小部件和滑块上绘制我的圈子。

这是我的Kv文件,包括带有滑块的小部件类

<Compass_slider>:
    radius:radius
    arc:arc
    canvas:
        Color:
            rgb: 0.8, 0.8, 0.8,1    

        Rectangle:
            pos:root.pos
            size:root.size
    BoxLayout:
        pos:
            root.pos
        size:
            root.size
        orientation: 'vertical'
        Slider:
            id:radius
            min: 0.
            max: 50.
            step:1
            value_track_color:1,0,0,1
        Label:
            color:1,0,0,1
            pos:root.pos
            text: 'radius = {}'.format(radius.value)

        Slider:
            id: arc
            min:0.
            max: 360.
            value:0
            step:1
            value_track_color:1,0,0,1

        Label:
            color:1,0,0,1
            pos:root.pos
            text: 'arc = {}'.format(arc.value)

和我的窗口小部件类的python文件,我希望通过滑块确定半径和圆弧来绘制圆。我也想成为圆在touch_down位置的中心。

class MyPaintWidget(Widget):
    global undolist
    global objects

    def __init__(self, **kwargs):
        super(MyPaintWidget, self).__init__(**kwargs)
        self.touch_init = 0, 0
        self.circle = Line()

    def undo(self, obj):
        if len(objects) > 0:
            item = objects.pop(-1)
            self.canvas.remove(item)

    def on_touch_down(self, touch):
        if icons["eraser"]:

            with self.canvas:
                Color(1, 1, 1, 1)
                Rectangle(pos=(touch.x - d, touch.y - d), size=(2 * d, 2 * d))

        elif icons["compass"]:
            pass

我觉得类似

elif icons["compass"]:
    Line(circle=(touch.x,touch.y,compass_slider().radius.value,0,compass_slider().arc.value))

1 个答案:

答案 0 :(得分:0)

这是一个简单的应用程序,可以满足您的大部分需求。这将使用on_value的{​​{1}}属性和Slider事件来触发绘制弧。因此,对半径或圆弧的任何更改都会绘制新的圆弧。此外,任何触摸事件都会在该位置绘制弧线。

on_touch_down