cara mendapatkan data input pengguna dari loop for ke file python di kivymd
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
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.