python - 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)
编辑:有一些错误的文字要删除
解决方案
你可以设置一个普通的属性。
button = Button(...)
button.my_custom_attr = 'value'
推荐阅读
- c# - 将从不同来源收集的数据合并到一个 IEnumerable 对象中
- python - 从 SQLite 更改后 PostgreSQL 的问题
- java - 在 bash 逗号中读取文件路径
- css - Facebook客户聊天溢出/编辑高度?
- java - Bytebuddy 循环依赖 Java
- go - 为什么无论种子值如何,我总是得到随机结果?
- android - 为 Azure B2C 访问令牌交换 Facebook SDK 访问令牌
- android - 我的 Android TextView 没有正确显示?
- unity3d - Unity 2D:如何使瓷砖与具有相同纹理的邻居合并?
- c++ - 在 if 语句中将两个数字相除会产生错误的输出