使用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()
答案 0 :(得分:0)
要覆盖窗口小部件/类中的方法,您需要从类中继承。你所做的是"覆盖" on_knob
和Screen
的{{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
如果触摸器与窗口小部件区域发生碰撞(如果触摸窗口小部件),则不会触摸事件。