ウィンドウのあるポイントから別のポイントにドラッグして、マウスで線を引こうとしています。また、ドラッグ中に線を表現したいと考えています。古い MS PaintBrush で線を引くようなものです。
私の問題は、古い線を常に削除し、新しい頂点命令をキャンバスに追加することによってのみこれを達成できたことです。ただし、既存の指示を更新することはできません。同じ命令を追加したり削除したりすることすらありません。Line の新しいインスタンスである必要があります。次のコードを実行すると、必要な結果を確認できます。コメント行で実行しようとすると、機能しなくなります。
from kivy.app import App
from kivy.uix.relativelayout import RelativeLayout
from kivy.graphics import Line
class MyCanvas(RelativeLayout):
def on_touch_down(self, touch):
with self.canvas:
self.line = Line(points=[touch.x,touch.y,touch.x+1,touch.y+1])
self.bind(on_touch_move=self.update_line, on_touch_up=self.end_line)
return True
def update_line(self, instance, touch):
self.line.points[2] = touch.x
self.line.points[3] = touch.y
self.canvas.remove(self.line)
# self.canvas.add(self.line) # - this doesn't work
# self.canvas.ask_update() # - not even using this
with self.canvas:
self.line = Line(points=self.line.points) # this works
def end_line(self, instance, touch):
self.unbind(on_touch_move=self.update_line)
self.unbind(on_touch_up=self.end_line)
self.line.points[2] = touch.x
self.line.points[3] = touch.y
self.canvas.remove(self.line)
# self.canvas.add(self.line) # - this doesn't work
# self.canvas.ask_update() #- not even using this
self.canvas.add(Line(points=self.line.points)) # this way works
class ExampleApp(App):
def build(self):
return MyCanvas()
ExampleApp().run()
また、この他の質問で提案されているように、カラー命令でKivyプロパティを使用してみました。それは機能しませんでした。それに関連する別の質問があります。