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>