cara mendapatkan data input pengguna dari loop for ke file python di kivymd

Aug 28 2020

saya membuat aplikasi untuk mengalikan 2 matriks. untuk itu saya membuat antarmuka pengguna tetapi tidak dapat menemukan cara untuk mendapatkan input pengguna di file python saya, sehingga saya dapat melakukan operasi di sana.

inilah file kivy saya

#: 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()

karena MDTextField saya berada di dalam for loop, jadi saya tidak dapat menggunakan id di sana karena dari situ saya akan mendapatkan semua 16 kolom teks dengan id yang sama. bagaimana cara mendapatkan 16 input textfield saya di dalam fungsi app.find_multiply di file python saya, sehingga saya dapat melakukan operasi di sana.

Jawaban

inclement Aug 30 2020 at 12:36

Simpan referensi ke bidang teks Anda, dan akses nanti untuk melakukan apa yang Anda inginkan.

Saya akan menghapus Anda on_parent, mengganti GridLayoutdengan kelas Anda sendiri MyGridLayout(GridLayout):, dan meminta kelas itu melakukan:

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)]

Kemudian nanti ketika Anda ingin mengaksesnya, Anda dapat melakukan iterasi melalui mis entered_numbers = [int(field.text) for field in self.text_field].

Tentu saja itu hanya contoh dasar, pada kenyataannya Anda ingin pengecekan kesalahan dll.