0

私は Kivy チュートリアル、プログラミング ガイドに取り組んでいますが、次のコードが実際にボタンの位置をどこにも出力していないことがわかりました。つまり、btn_pressed() メソッドは何もしていないようです。 .

 from kivy.app import App
 from kivy.uix.widget import Widget
 from kivy.uix.button import Button
 from kivy.uix.boxlayout import BoxLayout
 from kivy.properties import ListProperty

 class RootWidget(BoxLayout):

     def __init__(self, **kwargs):
         super(RootWidget, self).__init__(**kwargs)
         self.add_widget(Button(text='btn 1'))
         cb = CustomBtn()
         cb.bind(pressed=self.btn_pressed)
         self.add_widget(cb)
         self.add_widget(Button(text='btn 2'))

     def btn_pressed(self, instance, pos):
         print ('pos: printed from root widget: {pos}'.format(pos=pos))

 class CustomBtn(Widget):

     pressed = ListProperty([0, 0])

     def on_touch_down(self, touch):
         if self.collide_point(*touch.pos):
             self.pressed = touch.pos
             # we consumed the touch. return False here to propagate
             # the touch further to the children.
             return True
         return super(CustomBtn, self).on_touch_down(touch)

     def on_pressed(self, instance, pos):
         print ('pressed at {pos}'.format(pos=pos))

 class TestApp(App):

     def build(self):
         return RootWidget()


 if __name__ == '__main__':
     TestApp().run()

なぜこれが機能しないのか、ヒントやアイデアはありますか? これは意図した動作で、何かを見逃していましたか、それともチュートリアルにエラーがありますか?

具体的には、上記の手順ではクリックして点滅できるボタンを生成しますが、メソッドに対応する出力はないようです:

 def btn_pressed(self, instance, pos):
     print ('pos: printed from root widget: {pos}'.format(pos=pos))

もしかして黒地に黒で印刷?

4

1 に答える 1

0

中央にある空白のラベルのないスポットは、場所を受け入れてコンソールに場所を出力するボタンです。「btn」というラベルの付いたボタンをクリックしていましたが、この場所が存在することに気づきませんでした。

チュートリアルのこの部分では、このようなことを正確に実行するカスタム ボタンを作成する方法を示しています。これがラベル付けされている場合はより明確になりますが、API を見ることで実行できるはずです。

とにかく、コードは期待どおりに機能しています。

于 2013-11-05T16:22:25.790 に答える