如何从for循环中获取用户输入的数据到kivymd中的python文件

Posted

技术标签:

【中文标题】如何从for循环中获取用户输入的数据到kivymd中的python文件【英文标题】:how to get data of user input from a for loop to python file in kivymd 【发布时间】:2020-12-17 22:32:56 【问题描述】:

我正在制作一个将 2 矩阵相乘的应用程序。为此我创建了用户界面,但无法弄清楚如何在我的 python 文件中获取用户输入,所以我可以在那里进行操作。

这是我的 kivy 文件

#: import MDTextField kivymd.uix.textfield.MDTextField
<MyApp>:    
    NavigationLayout:
        ScreenManager:
            Screen:
                name: "screen1"
                GridLayout:
                    cols: 4
                    padding: 30
                    spacing: 20
                    size: root.width * 0.4, root.height * 0.8
                    row_force_default: True
                    row_default_height: 30
                    pos_hint: 'center_x': 0.5,'center_y':0.55
                    size_hint: (None, None)
                    size: self.minimum_size
                    top: self.height
                    on_parent:
                        for i in range(16): self.add_widget(MDTextField(hint_text= 'sc', helper_text= 'hello', size_hint_x= None, width = 40))

                MDRectangleFlatButton:
                    text: 'back'
                    pos_hint: 'center_x': 0.5, 'center_y': 0.4
                    on_release:
                        app.find_multiply()

因为我的 MDTextField 在 for 循环中,所以我不能在那里使用 id,因为我将获得所有 16 个具有相同 id 的文本字段。 如何在我的 python 文件中的 app.find_multiply 函数中获取所有 16 个文本字段输入,以便我可以在那里执行操作。

【问题讨论】:

【参考方案1】:

存储对您的文本字段的引用,并在以后访问它们以执行您想要的操作。

我会删除您的on_parent,将GridLayout 替换为您自己的课程MyGridLayout(GridLayout):,然后让该课程执行:

def __init__(self, **kwargs):
    super().__init__(**kwargs)
    self.text_fields = [MdTextField(hint_text= 'sc', helper_text= 'hello', size_hint_x= None, width = 40))] for _ in range(16)]

然后当您想要访问它们时,您可以遍历例如entered_numbers = [int(field.text) for field in self.text_field].

当然,这只是一个基本示例,实际上您需要进行错误检查等。

【讨论】:

以上是关于如何从for循环中获取用户输入的数据到kivymd中的python文件的主要内容,如果未能解决你的问题,请参考以下文章

Kivymd:如何将“MDTextfield”更改为“int”

如何在kivyMD中获取标签的文本输入

在 Shiny 应用程序中,如何暂停 for 循环以获取用户输入,然后在单击按钮后继续?

如何在kivymd focus agane中制作输入字段

KivyMD:如何从 python 中添加的 TextField 获取文本

列表项 (Kivy & KivyMD) 循环值的回调