Wie verstecke ich einen ActionButton in Kivy?

Ich versuche, die Sichtbarkeit eines ActionButton dem aktuellen Bildschirm anzupassen (mit dem Bildschirmmanager). Ich konnte keine Visible-Eigenschaft oder ähnliches finden, mit der die Sichtbarkeit einfach umgeschaltet werden kann (weder für ActionButton noch für Widgets im Allgemeinen).

Ein Beitrag von 2013 schlägt vor, die Textur der Schaltfläche zu ändern, aber ich möchte mich nicht auf einen solchen Hack verlassen, um eine so einfache Aufgabe zu erledigen. Außerdem ist der Hintergrund meiner App variabel.

Ein weiterer Beitrag Schlagen Sie vor, das Widget zu entfernen und es bei Bedarf erneut hinzuzufügen. Trotz seiner unnötigen Komplexität. Ich habe Änderungen vorgenommen, um in meinem Fall zu funktionieren (ActionBar und ActionButton). Daher lösche ich die Widgets aus der ActionView und versuche dann, den ActionButton hinzuzufügen. Ich habe versucht, sowohl eine Schwachstelle als auch dieselbst Mitglied, bei beiden habe ich folgenden Fehler bekommen:

WidgetException: Cannot add <kivy.uix.actionbar.ActionButton object at 0x7fcd3fe22ce8>, it already has a parent <kivy.uix.actionbar.ActionView object at 0x7fcd3fe22870>

Jede Idee wäre sehr dankbar. Ich arbeite mit der Dev-Version, aber es funktioniert auch nicht mit 1.8.

BEARBEITEN Ich habe den folgenden Code ausprobiert:

<AppActionBar>:
    ActionView:
        id: av

        ActionButton:
            id: btn_next
            text: 'Next screen'
            icon: 'data/icons/next_dark.png'
            important: True
            on_release: app.go_next()

Diese Funktion wird ausgeführt, nachdem die Szene geladen wurde:

def _initialize(self):
  self.next = self.ids.btn_next.__self__ # same result if I don't use .__self__

Dieser Code löst die oben angegebene Ausnahme aus:

self.ids.av.clear_widgets()
self.ids.av.add_widget(self.next)

Hier ist die vollständige Ausnahmeverfolgung:

     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>

Antworten auf die Frage(4)

Ihre Antwort auf die Frage