我阅读了 Kivy 教程,但找不到如何禁用小部件(例如,按钮)。
def foo(self, instance, *args):
#... main business logic, and then
instance.disable = False
# type(instance) = kivy.uix.Button
我foo
与functools.partial
.
什么是正确的参数?
我阅读了 Kivy 教程,但找不到如何禁用小部件(例如,按钮)。
def foo(self, instance, *args):
#... main business logic, and then
instance.disable = False
# type(instance) = kivy.uix.Button
我foo
与functools.partial
.
什么是正确的参数?
如果您使用的是 kivy 版本 >= 1.8,那么您只需执行 widget.disabled = True。如果在以前的版本中,您可以简单地自己管理禁用,只需确保它不会对触摸做出反应并在禁用时显示替代外观。
disabled
,不是disable
例子:
from kivy.uix.button import Button
from kivy.app import App
from functools import partial
class ButtonTestApp(App):
def foo(self, instance, *args):
instance.disabled = True
def build(self):
btn = Button()
btn.bind(on_press=partial(self.foo, btn));
return btn
if __name__ == '__main__':
ButtonTestApp().run()
在以下示例中MyButton
遵循@qua-non 的想法。它使用 aBooleanProperty
来改变它的background_color
和color
。更重要的是,它if self.enabled:
在on_touch_down
. 如果没有,on_touch_down
则没有on_touch_move
、或。因此,我们可以考虑残疾人。on_touch_up
on_press
on_release
Button
我使用名称enabled
而不是disabled
通过使用 Kivy 1.8.0 的相同属性来避免将来可能出现的问题。
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.properties import BooleanProperty
from kivy.uix.button import Button
from kivy.lang import Builder
Builder.load_string("""
<Example>:
cols: 3
Button:
text: "Disable right button"
on_press: my_button.enabled = False
Button:
text: "enabled right button"
on_press: my_button.enabled = True
MyButton:
id: my_button
text: "My button"
on_press: print "It is enabled"
""")
class MyButton(Button):
enabled = BooleanProperty(True)
def on_enabled(self, instance, value):
if value:
self.background_color = [1,1,1,1]
self.color = [1,1,1,1]
else:
self.background_color = [1,1,1,.3]
self.color = [1,1,1,.5]
def on_touch_down( self, touch ):
if self.enabled:
return super(self.__class__, self).on_touch_down(touch)
class Example(GridLayout):
pass
class MyApp(App):
def build(self):
return Example()
if __name__=="__main__":
MyApp().run()