python kivy garden knob - 如何覆盖on_knob

时间:2016-11-18 10:47:15

标签: python kivy

使用Kivy.garden.knob,并遇到问题: 当我移动它时,我试图将旋钮值发布到命令行,但我无法使其工作,任何建议? 这里是整个代码,提前谢谢,FD。

#!/usr/bin/python

from threading import Thread
from cmd import Cmd
import logging
logging.getLogger("kivy").disabled = True


from kivy.app import App
from kivy.core.window import Window
from kivy.garden.knob import  Knob
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import ScreenManager, Screen

class FirstTimeConnect(Screen):
    def __init__(self, **kwargs):
        super(FirstTimeConnect, self).__init__(**kwargs)
        layout = GridLayout(cols=2)

        layout.knob1 = Knob(knobimg_source="/Users/admin/Dropbox/Strumenti/Concatenativa_PyCpp/knob_img/knob_black.png", marker_img="/Users/admin/Dropbox/Strumenti/Concatenativa_PyCpp/knob_img/bline.png")
        layout.add_widget(layout.knob1)

        def on_knob(self, value):
            print "hi"
        layout.knob1.bind(on_knob=on_knob)

        self.add_widget(layout)

sm = ScreenManager()
sm.add_widget(FirstTimeConnect(name='First Time Connect'))

class MyCmd(Cmd, object):
    pass

class MyApp(App):

    def build(self):
        #return LogScreen()
        return sm

if __name__ == '__main__':
    app = MyApp()
    Thread(target=app.run()).start()
    MyCmd(app).cmdloop()

1 个答案:

答案 0 :(得分:0)

要覆盖窗口小部件/类中的方法,您需要从类中继承。你所做的是"覆盖" on_knobScreen的{​​{1}}方法没有像Screen这样的方法,只是创建了一个新方法。

on_knob

另请注意,没有属性class MyKnob(Knob): def on_knob(self, value): print("hello!") ,并且它已被绑定类型"手动"与_value。在随意的Kivy行为knob方法中,事件并覆盖它们,您需要执行此操作:

on_*

取决于您首先要执行的内容,即

  • 旧行为+您的打印(class MyKnob(Knob): def on_my_property(self, <arguments if it has any>): super(MyKnob, self).on_my_property(<arguments>) print("hello!") + super
  • 您的打印+旧行为(print + print

如果完全重写它,只需从方法中删除super,它就不会执行默认行为,例如如果你用这个覆盖super(),我们会说:

on_touch_down

如果触摸器与窗口小部件区域发生碰撞(如果触摸窗口小部件),则不会触摸事件。