クリック座標は取得できたが、それを利用できない。生成予定のボタンウィジェット(MakeButton)に初期値を与えてtouch_downイベントが起きたときにそこの座標(pos)の値を入れ込もうとしたが駄目だった。先ず初期値が設定できない(self.x=None,self.y=Noneでエラー吐く)、WidgetからMakeButtonへ参照できない。
from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy.uix.label import Label from kivy.uix.button import Button from kivy.uix.widget import Widget from kivy.factory import Factory from kivy.uix.boxlayout import BoxLayout class MyWidget(Widget): def on_touch_down(self,touch): # print(touch.pos) ??????.x=touch.pos[0] ??????.y=touch.pos[1] class MyBoxLayout(BoxLayout,FloatLayout): pass class MyLabel(Label,MyWidget): pass class MyButton(Button,MyWidget): pass class MakeButton(Button,MyWidget): def __init__(self,*kwargs): super(MakeButton,self).__init__(*kwargs) self.x=None #????????? self.y=None #????????? class P34App(App): def build(self): layout=MyBoxLayout() myl=MyLabel() myb=MyButton() layout.add_widget(myl) layout.add_widget(myb) return layout P34App().run() -----kivylanguage------ <MyBoxLayout>: orientation:"vertical" <MyLabel>: text:'Label' <MyButton>: text:'Button' <MakeButton>: text:'Success' 以下変更後のコードを追記します。(ちゃんと動きます。) from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy.uix.label import Label from kivy.uix.button import Button class MyLayout(FloatLayout): def on_touch_down(self,touch): make_button=MakeButton() self.add_widget(make_button) make_button.pos=touch.pos class MyLabel(Label): pass class MyButton(Button): pass class MakeButton(Button): pass class TameshiApp(App): def build(self): layout=MyLayout() myl=MyLabel() myb=MyButton() layout.add_widget(myl) layout.add_widget(myb) return layout TameshiApp().run() ----------- <MyLabel>: text:'Label' pos:100,100 <MyButton>: text:'Button' pos:200,200 size_hint:[0.2,0.2] <MakeButton>: text:'Success' size_hint:[0.2,0.2]
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/25 10:45
2020/10/26 03:40 編集
2020/10/26 08:11
2020/10/26 08:13
2020/10/26 13:17 編集
2020/10/26 13:22
2020/10/27 05:37
2020/10/27 08:36
2020/10/27 11:04
2020/10/28 10:37
2020/10/28 10:45
2020/10/29 11:08 編集
2020/10/29 11:37
2020/10/29 12:47