Kivy - 如何用自定义元数据信息标记按钮或事件?

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

TLDR: 是否有一个好的方法在Kivy中为按钮(或任何小组件)添加自定义元数据?

在Kivy中,我设置了一些东西,我的应用程序将动态生成一组按钮,基于选择的特定 "标签"(在这个例子中,我传递 "水果 "标签)。

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

然后,我有一个类方法,根据生成的项目列表,在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
        )
    )

现在,我试图设置我的代码,使我总是尝试使用唯一的标识符来提取任何其他所需的信息(例如,如果我想要 "Cherry "的价格,我想引用唯一的ID,并使用它来提取价格信息)。因此,当我按下'Cherry'这样的按钮时,我也想获得'Cherry'的唯一ID。我目前的变通方法是将Button的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)

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

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

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

button = Button(...)
button.my_custom_attr = 'value'
© www.soinside.com 2019 - 2024. All rights reserved.