【问题标题】:using add_widget to generate TextInput and reference it later on Kivy, Python , no id使用 add_widget 生成 TextInput 并稍后在 Kivy、Python 上引用它,没有 id
【发布时间】:2021-05-16 21:23:04
【问题描述】:

我错了,我必须再做一次更新: 接受的答案现在包括一种通过 add_widget 引用生成的 Textinput 的方法,所以我的链接仍然是一种选择,但是通过编辑答案,对于所有想要坚持使用弱引用的人来说,这是一个解决方案,也许这是一个不错的开始方式使用弱引用。

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

我的方法完全错误,这就是我被卡住的原因。当我发现很多其他人出于相同的原因(从可用于 py 逻辑的用户界面获取 Textinput)采用相同的方法时,却被卡住了 我确实链接了一个对我有用的“解决方案”,使我能够在没有小部件 ID 的情况下访问 TextInput:

Right approach

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

在通过用户输入生成 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 的事实?

亲切的问候

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

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

香肠 [

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

【问题讨论】:

    标签: python-3.x kivy kivy-language


    【解决方案1】:

    您的代码:

    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一样访问。

    【讨论】:

    • 嘿,你能添加如何访问引用的对象吗?我需要将所有 TextInput 存储到一个列表中。由于您的解决方案正在执行我要求的操作,因此无论如何我稍后都会接受它。
    • 我已经接受了这样一个事实,即按照我的要求去做更不容易/更容易。所以我不得不再次编辑我的问题。感谢您的帮助,我很感激。当我醒来看到有人试图帮助我时,星期一的忧郁就消失了
    • 这是对我的更新的一个很好的补充。今天我已经完成了实验或新的东西,但我明天会试一试。我谢谢男人
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多