2016-11-18 5 views
1

Kivy.garden.knobを使用していて、問題が発生しました: 移動時にノブの値をコマンドラインに投稿しようとしていますが、それは、任意の提案を動作させる? ここでコード全体、事前に感謝、FD。あなたはクラスから継承に必要なウィジェット/クラスのメソッドをオーバーライドするpython kivy gardenノブ - on_knobをオーバーライドする方法

#!/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() 

答えて

0

。あなたがしたことは、on_knobメソッドがScreenの "上書き"され、Screenにはon_knobというメソッドがありません。新しいメソッドが作成されました。

class MyKnob(Knob): 
    def on_knob(self, value): 
     print("hello!") 

も何のプロパティknobがないことがわかり、それが「手動」_valueとの境界一種だということ。カジュアルKivy行動で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を上書きした場合のは言わせて:タッチがあなたのウィジェットのエリア(あなたがウィジェットに触れた場合)に衝突した場合

class MyWidget(Widget): 
    def on_touch_down(self, touch): 
     pass 

には、タッチイベントはありません。

関連する問題