Search code examples
pythonkivydropdownspinner

Kivy How to add changing Dates in Spinner (Dropdown)


I need the Spinner Dropdown to have values containing- Present day's Date (whichever day the user is opening the app)...+ the next 10 Dates from the present day. (Note- It should update automatically)

For example, if present date is 18/8/2021 I need the dropdown to show:-


| Select Date ^ |


| 18/8/2021 |

| 19/8/2021 |

| 20/8/2021 |

| 21/8/2021 |

| 22/8/2021 |

| 23/8/2021 |

| 24/8/2021 |

| 25/8/2021 |

| 26/8/2021 |

| 27/8/2021 |

| 28/8/2021 |


Python Code:

from kivy.app import App
from kivy.uix.button import Button
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.uix.screenmanager import Screen,ScreenManager


class Main(Screen):
    pass

class Manager(ScreenManager):
    pass
kv=Builder.load_file("test1.kv")
screen=Manager()
screen.add_widget(Main(name="main"))

class Test(App):
    def build(self):
        return screen

Test().run()

Kv Code:

<Main>:
    name: "main"
    Spinner:
        id: date
        text: "Select Date"
        values: ["18/8/2021","19/8/2021"] #generated automatically
        size_hint: (.3,.1)
        pos_hint: {"center_x":.5,"center_y":.5}
        background_color: "#FFFFFF"
        background_normal: ""
        color: "#000000"

Solution

  • .py file:

    from kivy.app import App
    from kivy.lang import Builder
    from kivy.uix.screenmanager import Screen,ScreenManager
    from datetime import datetime, timedelta
    
    class Main(Screen):
        def on_kv_post(self, base_widget):
            self.ids["date"].values = [(datetime.now() + timedelta(days=i)).strftime('%d/%m/%Y') for i in range(10)]
    
    
    class Manager(ScreenManager):
        pass
    
    
    class Test(App):
        def build(self):
            return Builder.load_file("test1.kv")
    
    Test().run()
    

    .kv file:

    <Main>:
        name: "main"
        Spinner:
            id: date
            text: "Select Date"
            size_hint: (.3,.1)
            pos_hint: {"center_x":.5,"center_y":.5}
            background_color: "#FFFFFF"
            background_normal: ""
            color: "#000000"
    
    <Manager>:
    
    Manager:
        Main: