Why Is My Kivy Actionbar Gone?
Solution 1:
In the following example we will replace the root widget, Manager with Menu, the detail solution is as follow:
main.py - Python Script
1. build method
Make the class Menu the root widget by replacing:
defbuild(self):
return Manager()
with:
defbuild(self):
return Menu()
2. Menu classs
Declare a variable, manager of type ObjectProperty which we will hook it up to the ScreenManager.
classMenu(BoxLayout):
manager =ObjectProperty(None)
menu.kv - kv File
3. Hook up the ObjectProperty to id
Here we hook up the ObjectProperty, manager to the ScreenManager's id, screen_manager so that we can reference it e.g. root.manager.current.
<Menu>:
manager: screen_manager
4. Define the height of ActionBar
We set the height of the ActionBar to 10% (0.1) of the parent's height using size_hint_y = 0.1
ActionBar:size_hint_y:0.1ActionView:
5. Define the height of the Button
We set the height of the Button to 10% (0.1) of the parent's height using size_hint_y = 0.1
Button:size_hint_y:0.1text:"Nothing"
6. Add ScreenManager as children of Menu
We add Manager as children of Menu after Button. Since we did not specify the height, it defaults to the remaining available height i.e. 0.8 (80% of parent's height).
Manager:id:screen_manager
Example
main.py
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.properties import ObjectProperty
from kivy.uix.boxlayout import BoxLayout
classMenu(BoxLayout):
manager = ObjectProperty(None)
classScreenThermo(Screen):
passclassScreenLight(Screen):
passclassScreenEnergy(Screen):
passclassScreenWeather(Screen):
passclassManager(ScreenManager):
screen_thermo = ObjectProperty(None)
screen_light = ObjectProperty(None)
screen_energy = ObjectProperty(None)
screen_weather = ObjectProperty(None)
classMenuApp(App):
defthermostaat(self):
print("Thermostaat")
defverlichting(self):
print("Verlichting")
defenergie(self):
print("Energie")
defweer(self):
print("Het Weer")
defbuild(self):
return Menu()
if __name__ == '__main__':
MenuApp().run()
menu.kv
#:kivy 1.10.0<Menu>:manager:screen_managerorientation:"vertical"ActionBar:size_hint_y:0.1ActionView:ActionPrevious:ActionButton:text:"Thermostaat"on_release:app.thermostaat()ActionButton:text:"Verlichting"#I want my screens to switch when clicking on this actionbar buttonon_press:root.manager.current='light'on_release:app.verlichting()ActionButton:text:"Energieverbruik"on_release:app.energie()ActionButton:text:"Het Weer"on_release:app.weer()Button:size_hint_y:0.1text:"Nothing"background_color:1,1,1,0.6background_normal:""Manager:id:screen_manager<ScreenThermo>:Button:text:"stuff1"#this is a test to see if i can switch through screenson_press:root.manager.current='light'<ScreenLight>:Button:text:"stuff2"<ScreenEnergy>:Button:text:"stuff3"<ScreenWeather>:Button:text:"stuff4"<Manager>:id:screen_managerscreen_thermo:screen_thermoscreen_light:screen_lightscreen_energy:screen_energyscreen_weather:screen_weatherScreenThermo:id:screen_thermoname:'thermo'manager:screen_managerScreenLight:id:screen_lightname:'light'manager:screen_managerScreenEnergy:id:screen_energyname:'energy'manager:screen_managerScreenWeather:id:screen_weathername:'weather'manager:screen_manager
Output
Solution 2:
you never add the menu to your app also you need to add a manager property in your menu. Try something like this:
in the .py:
...
classMenu(BoxLayout):
manager = ObjectProperty(None)
...
classMenuApp(App):
defthermostaat(self):
print("Thermostaat")
defverlichting(self):
print("Verlichting")
defenergie(self):
print("Energie")
defweer(self):
print("Het Weer")
...
Notice that I have removed the build method
In your kv add this block of code at the end:
...BoxLayout:#use a box layout or whatever you wantorientation:'vertical'Menu:size_hint_y:.1manager:managerManager:size_hint_y:.9id:manager
Post a Comment for "Why Is My Kivy Actionbar Gone?"