from kivy.lang import Builder from kivy.properties import StringProperty from kivy.uix.screenmanager import Screen from kivymd.icon_definitions import md_icons from kivymd.app import MDApp from kivymd.uix.list import OneLineIconListItem Builder.load_string( ''' #:import images_path kivymd.images_path : IconLeftWidget: icon: root.icon : BoxLayout: orientation: 'vertical' spacing: dp(10) padding: dp(20) BoxLayout: size_hint_y: None height: self.minimum_height MDIconButton: icon: 'magnify' MDTextField: id: search_field hint_text: 'Search icon' on_text: root.set_list_md_icons(self.text, True) RecycleView: id: rv key_viewclass: 'viewclass' key_size: 'height' RecycleBoxLayout: padding: dp(10) default_size: None, dp(48) default_size_hint: 1, None size_hint_y: None height: self.minimum_height orientation: 'vertical' ''' ) class CustomOneLineIconListItem(OneLineIconListItem): icon = StringProperty() class PreviousMDIcons(Screen): def set_list_md_icons(self, text="", search=False): '''Builds a list of icons for the screen MDIcons.''' def add_icon_item(name_icon): self.ids.rv.data.append( { "viewclass": "CustomOneLineIconListItem", "icon": name_icon, "text": name_icon, "callback": lambda x: x, } ) self.ids.rv.data = [] for name_icon in md_icons.keys(): if search: if text in name_icon: add_icon_item(name_icon) else: add_icon_item(name_icon) class MainApp(MDApp): def __init__(self, **kwargs): super().__init__(**kwargs) self.screen = PreviousMDIcons() def build(self): return self.screen def on_start(self): self.screen.set_list_md_icons() MainApp().run()