O'Reilly logo

Creating Apps in Kivy by Dusty Phillips

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Chapter 3. Manipulating Widgets

It’s time to think about widgets again. In this chapter, you’ll see how to dynamically change what widgets are displayed in the widget tree. You’ll mainly be implementing searching and the rendering of search results. This will give you a good understanding of the intricacies of the Kivy ListView widget and its adapters, and you’ll also learn how to create widgets and update the display dynamically in response to user or system events.

A More Extensible Root Widget

While the user will find it useful for the Add Location form to be rendered the first time the application is run, it’s not actually appropriate to set it as the root widget on the app. It’s better to have a custom root widget that knows how to manage the widgets that are displayed on it, such as the various forms I mentioned in Chapter 1.

I expect the root widget to have several methods for manipulating the display of child widgets. Start by adding an empty class to the main.py file. Make it extend BoxLayout, but for now, the class can be otherwise empty (meaning it will behave exactly like a normal BoxLayout). See Example 3-1.

Example 3-1. Empty root class
class WeatherRoot(BoxLayout):
    pass

For now, set up the KV language file to render an instance of this as the root widget. Then set up a new rule for it to include AddLocationForm as a child, as demonstrated in Example 3-2.

Example 3-2. Root widget with AddLocationForm child
WeatherRoot:

<WeatherRoot>:
    AddLocationForm

Since the parent class is ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required