私はkivyで簡単な描画アプリケーションを作成しようとしていますが、それは単に特定のウィジェットクラス全体についてではなく、私はon_touch_downウィジェットを具体的にするにはどうすればよいですか?
on_touch_down
機能を持ついくつかの問題を抱えています。ですから、私がon touch onとon touchの移動機能を使ってキャンバスに描画すると、ボタンに割り当てられたタッチダウン機能に影響を与え、効果的に無効にします。ここでボタンが動作しないコードがあります。
のpythonコード:
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.graphics import Line
from kivy.graphics import *
from kivy.uix.widget import Widget
class MyScreenManager(ScreenManager):
pass
class MenuScreen(Screen):
pass
class DrawScreen(Screen):
def on_touch_down(self, touch):
with self.canvas.before:
Color(1, 0, 0)
touch.ud["line"] = Line(points=(touch.x, touch.y), width=5)
def on_touch_move(self, touch):
touch.ud["line"].points += (touch.x, touch.y)
class DrawApp(App):
def build(self):
return MyScreenManager()
DrawApp().run()
kivyコード:
<[email protected]>:
font_size: 65
size_hint: 0.4, 0.25
<MyScreenManager>:
MenuScreen:
id: menu
name: "menu"
DrawScreen:
id: draw
name: "draw"
<MenuScreen>:
canvas.before:
Color:
rgba: 1,1,1,1
Rectangle:
size: self.size
pos: self.pos
MenuButton:
text: "Draw"
on_release: root.manager.current = "draw"
pos_hint:{"center_x":0.5, "center_y":0.6}
MenuButton:
text: "Quit"
on_release: app.stop()
pos_hint:{"center_x":0.5, "center_y":0.3}
<DrawScreen>:
canvas.before:
Color:
rgba: 1,1,1,1
Rectangle:
size: self.size
pos: self.pos
Button:
id: but
size_hint: 0.2,0.1
pos_hint_x: 0 + self.width
font_size: 30
text: "Back"
on_release: root.manager.current = "menu"
私はここに私の問題を回避するコードだ、collide_pointを使用して周りに簡単な仕事を見つけるために管理:
class DrawScreen(Screen):
def on_touch_down(self, touch):
but = self.ids.but
if but.collide_point(touch.x, touch.y):
self.manager.current = "menu"
else:
with self.canvas.before:
Color(1, 0, 0)
touch.ud["line"] = Line(points=(touch.x, touch.y), width=5)
def on_touch_move(self, touch):
touch.ud["line"].points += (touch.x, touch.y)
しかし、しばらくこれは、私が手動で各ボタンをchに設定しなければならないような、新しい問題の世界全体を引き起こしますボタンを離すとその機能は実行されません。つまり、クラスに追加するすべてのものをifステートメントに追加する必要があります。
私は、より単純な方法が必要であることは非常に肯定的です。私の最初の考えは、たぶん1つのウィジェットにしか影響を与えないようにタッチを追加できるかもしれないということでした。私の2番目の考えは、キャンバスや何かを描かないほうがいいと思うかもしれませんね?
ありがとうございました!あなたがメソッドを上書きするとき