使用 add_widget 生成 TextInput 并稍后在 Kivy 上引用它,Python,没有 id

using add_widget to generate TextInput and reference it later on Kivy, Python , no id

我错了,我得再做一次更新: 已接受的答案现在包括一种引用由 add_widget 生成的文本输入的方法,因此我的 Link 仍然是一种替代方法,但通过编辑答案,对于所有想坚持使用 weakref 的人来说,这是一个解决方案也许这是开始使用 weakref 的好方法。

这是我的问题的最后一次编辑: 我问这个问题的原因是我从自动生成的 TextInput 小部件中获取 TextInput 并将这些文本输入添加到列表中的方法。

我的方法完全错误,这就是我卡住的原因。当我发现很多其他人出于同样的原因要求(从可用于 py 逻辑的用户界面获取 Textinput)采用相同的方法时,卡住了 我做了 link 一个对我有用的“解决方案”,使我能够在没有 Widget Id 的情况下访问 TextInput:

我真的希望能为你们节省一些时间。无论如何,我将答案标记为正确,因为它给出了我所要求的解决方案(我的错误)。

在通过用户输入生成 TextInput 小部件后,我真的很难引用它们。 我已经在尝试 walk() 选项了。

self.ids.grid.clear_widgets([i for i in self.ids.grid.children])
        label1 = Label(text="Periode")
        label2 = Label(text="Gross Income d Geschäftsfeldes")
        self.ids.grid.add_widget(label1)
        self.ids.grid.add_widget(label2)
        for i in range(int(ButtonsZähler[0])):
            label = Label(text="GI in Periode: -" + str(i+1))
            text = TextInput(text=' ')
            self.ids.grid.add_widget(label)
            btn1 = Button(text="Close", )
            self.ids.grid.add_widget(text)
            self.ids['text'] = weakref.ref(text)

我有以下与此相关的 kivy 代码:

: 姓名:'RisikokapitalOperativesRisikoIII'

GridLayout:
    id: Peter
    cols: 1
    GridLayout:
        id: grid
        name : grid
        cols: 2
    GridLayout:
        id: grid2
        cols: 2
        Button:
            id:zurruck
            text:"Abbrechen"
            on_press:

                app.root.total_button = 5
            on_release:
                root.redo()
                app.root.current = "RisikokapitalOperativesRisikoI"
                root.manager.transition.direction = "left"

我不知道如何引用文本输入。标签和文本输入正确显示。我想将用户输入的所有文本添加到一个列表中。我不知道如何解决 add_widget 无法在我的 kv 文件中生成 id 的问题?

亲切的问候

更新: 通过使用已经给出的帮助,我可以在我的控制台中检索以下信息(给定所有小部件的列表的一部分,但我只是 post 一个):

<weakref at 0x000001E761011D60; to 'TextInput' at 0x000001E760FFC7B0>

香肠 [,

我希望能够访问用户提供的 TextInput 并将此输入添加到列表中。由于文档是为有经验的用户编写的,而我不是,也许有人愿意提供一个易于理解的示例?

您的代码:

self.ids['text'] = weakref.ref(text)

TextInput 添加到 ids,但它会将所有项的密钥设置为相同的值 (text)。因此,如果您尝试使用 self.ids.text 访问 TextInput,您将只会添加最后一个 TextInput。您可以通过为每个 TextInput 创建唯一键来解决此问题,例如:

self.ids[str(i+1)] = weakref.ref(text)

或者只保留您自己的 TextInput 小部件列表:

self.ti_list = []
.
.
.
for i in range(int(ButtonsZähler[0])):
    .
    .
    .
    self.ti_list.append(text)

在查看创建 TextInputs 的代码时,唯一区分 TextInputs 的是 i 的值。其他一切都一样。所以就是用来记录的TextInputs。在使用 ids 的情况下,您将通过其值 i 作为 self.ids[str(i+1)].text 访问 TextInput 内容。同样,如果你使用列表,你可以访问相同的 self.ti_list[i].text.