Skip to content Skip to sidebar Skip to footer

Why Is My Kivy Actionbar Gone?

Good evening, I'm trying to combine kivy's actionbar with a screenmanager. I've gotten to the point where I can switch through screens, but am not able to get my actionbar to show.

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

Figure 1 - App StarupFigure 2 - Clicked Verlichting & Screen stuff2 Displayed

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?"