Skip to content
Advertisement

Missing Recycle View widget

I need to create an autofill app, I have a label and text input on the top, and recycle view on the bottom. However, when I run the program, the recycle view disappears, even though I have set in the string. This app will facilitate searching content by typing the name in the text input and the relevant content will appear in the recycle view, so the user is not required to view through the long list of content.

from kivy.app import App
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.recycleview import RecycleView
from kivy.uix.boxlayout import BoxLayout

Window.size = (350, 600)

Builder.load_string('''
<MyLayout>:
    BoxLayout:
        orientation: "vertical"
        spacing: 10
        padding: 10

        Label :
            text : 'Favourite Pizza'
           
        TextInput :
            font_size: 30
            focus: True
            multiline : False
           
        <RV>:    
            RecycleBoxLayout:   
                viewclass: 'TextInput'        
                default_size: None, 30
                default_size_hint: 1, None
                size_hint_y: .8
                height: self.minimum_height
                orientation : 'vertical'  
                  
''')

class MyLayout(BoxLayout):
    pass

class RV(RecycleView):  
    def __init__(self, **kwrgs):
        super(RV, self).__init__(**kwrgs)
        content = ["Pepperoni", "Cheese","Papper", "Hawaii", "Seafood", 
        "Ham", "Taco", "Onion"]
        self.data = [{'text':item} for item in content]     
        print(content)

class MainApp(App):
    title='Search App'
    def build(self):
        Window.clearcolor = (51/255, 153/255, 1, 1) 
        return MyLayout()    
   
MainApp().run()

What should I do in order to get a complete view (label, text input & recycle view)? I want to type an input text, the relevant content will appear in the recycle view, can I use recycle view to achieve this purpose? Can I use both BoxLayout and the RecycleBoxLayout at the same time, since it refers to the different widgets?

Advertisement

Answer

First of all, dynamic classes must be in the same level as root.

Secondly in order to make RecycleView grow vertically, here, you have to set size_hint_y of RecycleBoxLayout to None. Thus your kvlang should now look like,

<MyLayout>:
    BoxLayout:
        orientation: "vertical"
        spacing: 10
        padding: 10

        Label :
            text : 'Favourite Pizza'
           
        TextInput :
            font_size: 30
            focus: True
            multiline : False
           
        RV:


<RV>:
    viewclass: 'TextInput'
    RecycleBoxLayout:
        default_size: None, 30
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation : 'vertical'
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement