首页 > 解决方案 > Kivy - 如何使用自定义元数据/信息标记按钮或事件?

问题描述

TLDR:有没有一种好方法可以将自定义元数据添加到 Kivy 中的按钮(或任何小部件)?

在 Kivy 中,我设置了一些东西,这样我的应用程序将根据选择的特定“标签”动态生成一组按钮(在本例中,我传递了“水果”标签)。

然后生成 2 个列表。第一个列表是元素的名称(例如水果的名称)。第二个列表是该元素的唯一标识符(数据是从某个主数据库中提取的,该数据库将所有这些信息链接在一起)。

然后,我有一个基于生成的项目列表在 GridLayout 中生成按钮的类方法。

#This section is in the .py file

itemNameList = ["Apple", "Banana", "Cherry"]
itemUniqueIDList = ["Unique1", "Unique2", "Unique3"]

for ProductName,ProductUniqueID in zip(itemNameList,itemUniqueIDList):
    #For each element in the list of products
    #add a button widget to the WidgetID instance
    WidgetID.add_widget(
        Button(
            id=ProductUniqueID,#THIS IS THE POTENTIAL ISSUE
            text=ProductName,
            on_press=self.on_press_Product_Select_Button
        )
    )

现在,我正在尝试设置我的代码,以便我始终尝试使用唯一标识符来提取所需的任何其他信息(例如,如果我想要“樱桃”的价格,我想引用唯一 ID,并使用它拉价格信息)。因此,当我按下像'Cherry'这样的按钮时,我也想获得'Cherry'的唯一ID。我目前的解决方法是将按钮的 ID 设置为按钮对应的项目的唯一 ID。

因此,当按下这些动态生成的按钮之一时,我会拉出文本(例如“Cherry”)和相关的唯一 ID(例如“Unique3”),如下所示:

#This section is in the .py file

def on_press_item(self, instance):
    #Method that will be called when a button of an item (e.g. the 'Cherry' button' is pressed

    ProductName = instance.text #Returns 'Cherry'
    ProductUniqueID = instance.id #"Returns 'Unique3'

但是,我注意到我收到以下警告,我怀疑这是因为我在生成按钮时设置了按钮的 id(因为当我注释掉该行时,警告不再出现):

[WARNING] Deprecated property "<StringProperty name=id>" of object "<kivy.uix.button.Button object at 0x000001EB791BC388>" has been set, it will be removed in a future version

作为参考,这里是 .kv 文件的一部分,然后与这部分代码进行交互:

#This section is in the .kv file

GridLayout:
    id:menu_item_button_layout
    cols: 4

    on_parent:
        root.GenerateProductButtons(WidgetID=menu_item_button_layout)

编辑:有一些错误的文字要删除

标签: pythonkivykivy-language

解决方案


你可以设置一个普通的属性。

button = Button(...)
button.my_custom_attr = 'value'

推荐阅读