如何打印来自kivy循环的文本输入

how to print the text inputs from the loop in kivy

我想在按下按钮时打印所有用户文本输入。当我按下按钮打印输入时出现错误 TypeError: p() takes 1 positional argument but 2 were given 的问题。只是想知道文本输入的数字可能因用户而异

from kivy.uix.textinput import TextInput
from kivy.app import App
from kivy.uix.button import Button
from kivy.lang.builder import Builder

kv=Builder.load_string('''
ScrollView:
    GridLayout:
        id:inputs
        cols:1
        row_force_default:True
        row_default_height:30
        size_hint_y:None
        height:self.minimum_height
''')

class Accounting(App):
    def build(self):return kv

    def on_start(self):
        self.return_list = [] #print this list
        w = Button(text='print all the text inputs',on_press=self.p)
        self.return_list.append(w)
        self.root.ids.inputs.add_widget(w)
        for i in range(5):
            w = TextInput()
            self.return_list.append(w)
            self.root.ids.inputs.add_widget(w)
        return self.return_list

    def p(self):print(self.return_list)#here

Accounting().run()

当您单击按钮时,然后 Kivy 使用额外的参数运行它 p(widget) 这样您就可以将功能分配给许多按钮,您将看到单击了哪个按钮。

但是这意味着你必须在函数中获取这个值

    def p(self, widget):

最少的工作代码。

如果您只需要 TextInput 中的文本,则从 return_list 中删除 Button

from kivy.uix.textinput import TextInput
from kivy.app import App
from kivy.uix.button import Button
from kivy.lang.builder import Builder

kv = Builder.load_string('''
ScrollView:
    GridLayout:
        id:inputs
        cols:1
        row_force_default:True
        row_default_height:30
        size_hint_y:None
        height:self.minimum_height
''')

class Accounting(App):
    
    def build(self):
        return kv

    def on_start(self):
        self.return_list = [] #print this list
        
        w = Button(text='print all the text inputs', on_press=self.p)
        self.return_list.append(w)
        self.root.ids.inputs.add_widget(w)
        
        for i in range(5):
            w = TextInput()
            self.return_list.append(w)
            self.root.ids.inputs.add_widget(w)

        return self.return_list

    def p(self, widget):
        print('widget:', widget)
        print('text  :', widget.text)
        
        for item in self.return_list:
            print(item.text)

Accounting().run()