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 回答