用python添加的kivy中的引用对象

Posted

技术标签:

【中文标题】用python添加的kivy中的引用对象【英文标题】:Reference objects in kivy added with python 【发布时间】:2020-08-26 11:13:47 【问题描述】:

我需要知道如何引用动态创建的对象。就像在示例中一样,如何在创建后更改按钮的文本?通常我会使用他们的 id 来做,但据我所知,你不能给在 python 中创建的对象提供 id。

.py 代码

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.uix.button import Button
from kivy.clock import mainthread

NUMBER_OF_BUTTONS = 5


class MapScreen(Screen):

    @mainthread
    def on_enter(self):
        for i in range(NUMBER_OF_BUTTONS):
            button = Button(text="B_" + str(i))
            self.ids.grid.add_widget(button)

class Test(App):
    pass


Test().run()

.kv 代码

ScreenManager:
  MapScreen:

<MapScreen>:
  name: 'map'

  GridLayout:
    id: grid
    cols: 1

【问题讨论】:

【参考方案1】:

您可以只保留Buttons 的列表:

def on_enter(self):
    self.buttons = []
    for i in range(NUMBER_OF_BUTTONS):
        button = Button(text="B_" + str(i))
        self.buttons.append(button)
        self.ids.grid.add_widget(button)

或者您可以创建自己的字典:

def on_enter(self):
    self.buttons = 
    for i in range(NUMBER_OF_BUTTONS):
        text = "B_" + str(i)
        button = Button(text=text)
        self.buttons[text] = button
        self.ids.grid.add_widget(button)

【讨论】:

以上是关于用python添加的kivy中的引用对象的主要内容,如果未能解决你的问题,请参考以下文章

在 Kivy.kv 文件中,我如何引用另一个类中的方法

Kivy,弱引用对象不再存在

用图像填充 Python 的 Kivy 中的 GridLayout

Kivy - 通过引用根属性动态添加按钮

如何将文本输入值添加到kivy python中字典中的值?

Kivy:错误弱引用对象(在时钟函数中)不再存在