В следующем примере MyButton
следует @ qua-non idea. Он использует BooleanProperty
для изменения 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()
Я добавил определение функции Foo (я, * Например, арг): печать instance.disabled instance.disabled = true' и получил _print instance.disabled AttributeError: 'Кнопка' объект имеет no attribute 'disabled'_ –
Свойство 'disabled' было введено в версии 1.8.0. Если вы хотите его использовать, вам необходимо реализовать свою структуру. – Nykakin
Но как? [На официальном сайте] (http://kivy.org/#download) написано, что «Текущая версия 1.7.2, выпущенная 4 августа 2013 года». Откуда у тебя новый))? –