Kivy/KivyMD:添加下拉项选择发生变化时的方法

问题描述 投票:0回答:1

我使用 Kivy / KivyMD 和 Python 开发了一个 UI。 UI 非常简单:按下按钮时,DropDownItem 就会添加到布局中。我需要添加一个方法,每次 DropDownItem 的选择发生变化时都会调用该方法。这是代码:

from kivy.lang import Builder
from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivymd.toast import toast
from kivymd.uix.menu import MDDropdownMenu
from kivymd.uix.dropdownitem.dropdownitem import MDDropDownItem
from kivy.metrics import dp



Builder.load_string(
    """    
<View>:
    MDGridLayout:
        rows: 3
        id: layout
        padding: 100, 50, 100, 50
        spacing: 0, 50
        
        
        MDRaisedButton:
            text: 'CREATE DDI'
            on_release: root.Button_CreateDDI__On_Click()
            
        MDRaisedButton:
            id: button_check
            disabled: True
            text: 'CHECK SELECTION'
            on_release: root.Button_CheckSelection_On_Click()       

""")



class View(MDScreen):
    def __init__(self, **kwargs):
        super(View, self).__init__(**kwargs)
        
        
    def Button_CreateDDI__On_Click(self):        
        self.myDdi = MDDropDownItem()
        self.myDdi.text = 'SELECT POSITION'
                
        myMenu, scratch = self.Create_DropDown_Widget(self.myDdi, ['POS 1', 'POS 2', 'POS 3'], width=4)
        self.myDdi.on_release = myMenu.open
        self.myDdi.bind(on_select = self.DDI_Selection_Changed)   
        
        
        self.ids.button_check.disabled = False
        self.ids.layout.add_widget(self.myDdi)
        
        
    def Button_CheckSelection_On_Click(self):
        toast('CURRENT VALUE: ' + self.myDdi.current_item)        
        
        
    def DDI_Selection_Changed(self):
        toast('SELECTION CHANGED: ' + self.myDdi.current_item)
        
       
    def Create_DropDown_Widget(self, drop_down_item, item_list, width):
        items_collection = [
            {
                "viewclass": "OneLineListItem",
                "text": item_list[i],
                "height": dp(56),
                "on_release": lambda x = item_list[i]: self.Set_DropDown_Item(drop_down_item, menu, x),
            } for i in range(len(item_list))
        ]
        
        menu = MDDropdownMenu(caller=drop_down_item, items=items_collection, width_mult=width)
        menu.bind()
        
        return menu, items_collection

         
    def Set_DropDown_Item(self, drop_down_item, menu, text_item):
        drop_down_item.set_item(text_item)
        menu.dismiss()
        
        
        

class MainApp(MDApp):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self.View = View()


    def build(self):
        self.title = ' DROP DOWN ITEM ADDED DYNAMICALLY'
        return self.View


if __name__ == '__main__':
    MainApp().run()

当在kv部分添加DropDownItem时,可以使用select事件。一旦布局已经显示,就会在此处添加小部件。所以我尝试绑定 on_select 事件,但没有发生任何错误或异常。如何在每次 DropDownItem 的选择发生变化时调用方法?

python kivy kivy-language kivymd
1个回答
0
投票

您已经拥有一个每当选择下拉菜单中的项目时就会调用的函数。我会把吐司移到那里。

def Set_DropDown_Item(self, drop_down_item, menu, text_item):
    drop_down_item.set_item(text_item)
    menu.dismiss()

    toast('CURRENT VALUE: ' + text_item )
© www.soinside.com 2019 - 2024. All rights reserved.