¿Cómo ocultar un ActionButton en Kivy?
Estoy tratando de modificar la visibilidad de un ActionButton de acuerdo con la pantalla actual (usando Screen Manager). No pude encontrar una propiedad Visible o algo así que simplemente pueda alternar la visibilidad (ni para ActionButton ni para Widgets en general).
Una publicación de 2013 sugiere cambiar la textura del botón, pero no quiero confiar en un truco para realizar una tarea tan simple, además, el fondo de mi aplicación será variable.
Otro post sugiera eliminar el widget y agregarlo nuevamente según sea necesario. A pesar de su complejidad innecesaria. Modifiqué para trabajar en mi caso (ActionBar y ActionButton), así que borro los widgets de ActionView y luego trato de agregar ActionButton. Traté de almacenar tanto un débil como elyo miembro, con ambos obtuve el siguiente error:
WidgetException: Cannot add <kivy.uix.actionbar.ActionButton object at 0x7fcd3fe22ce8>, it already has a parent <kivy.uix.actionbar.ActionView object at 0x7fcd3fe22870>
Cualquier idea sería muy apreciada. Estoy trabajando con la versión de desarrollo, pero tampoco funciona con 1.8.
EDITAR Intenté el siguiente código:
<AppActionBar>:
ActionView:
id: av
ActionButton:
id: btn_next
text: 'Next screen'
icon: 'data/icons/next_dark.png'
important: True
on_release: app.go_next()
Esta función se ejecuta después de cargar la escena:
def _initialize(self):
self.next = self.ids.btn_next.__self__ # same result if I don't use .__self__
Este código plantea la excepción publicada anteriormente:
self.ids.av.clear_widgets()
self.ids.av.add_widget(self.next)
Aquí está el rastro de excepción completo:
self._mainloop()
File "/usr/local/lib/python2.7/dist-packages/kivy/core/window/window_pygame.py", line 266, in _mainloop
EventLoop.idle()
File "/usr/local/lib/python2.7/dist-packages/kivy/base.py", line 330, in idle
Clock.tick_draw()
File "/usr/local/lib/python2.7/dist-packages/kivy/clock.py", line 429, in tick_draw
self._process_events_before_frame()
File "/usr/local/lib/python2.7/dist-packages/kivy/clock.py", line 562, in _process_events_before_frame
if event.tick(self._last_tick) is False:
File "/usr/local/lib/python2.7/dist-packages/kivy/clock.py", line 309, in tick
ret = callback(self._dt)
File "/usr/local/lib/python2.7/dist-packages/kivy/uix/boxlayout.py", line 174, in do_layout
c.width = w
File "properties.pyx", line 345, in kivy.properties.Property.__set__ (kivy/properties.c:3589)
File "properties.pyx", line 377, in kivy.properties.Property.set (kivy/properties.c:4064)
File "properties.pyx", line 431, in kivy.properties.Property.dispatch (kivy/properties.c:4657)
File "/usr/local/lib/python2.7/dist-packages/kivy/uix/actionbar.py", line 552, in on_width
self._layout_all()
File "/usr/local/lib/python2.7/dist-packages/kivy/uix/actionbar.py", line 441, in _layout_all
super_add(child)
File "/usr/local/lib/python2.7/dist-packages/kivy/uix/boxlayout.py", line 212, in add_widget
return super(BoxLayout, self).add_widget(widget, index)
File "/usr/local/lib/python2.7/dist-packages/kivy/uix/layout.py", line 78, in add_widget
return super(Layout, self).add_widget(widget, index)
File "/usr/local/lib/python2.7/dist-packages/kivy/uix/widget.py", line 466, in add_widget
% (widget, parent))
WidgetException: Cannot add <kivy.uix.actionbar.ActionButton object at 0x7fecb5d6ed50>, it already has a parent <kivy.uix.actionbar.ActionView object at 0x7fecb5d6e8d8>