我已经在我的应用程序中包含了绘制圆圈的功能。但是,圆的半径和圆弧长度由滑块值确定。我希望在不同的小部件和滑块上绘制我的圈子。
这是我的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))
答案 0 :(得分:0)
这是一个简单的应用程序,可以满足您的大部分需求。这将使用on_value
的{{1}}属性和Slider
事件来触发绘制弧。因此,对半径或圆弧的任何更改都会绘制新的圆弧。此外,任何触摸事件都会在该位置绘制弧线。
on_touch_down