Как получить значение MDText field?
Есть интерфейс с drop layout. как получить значение из MDTextFiel с id: summ, чтобы сработал def debit()?
я пробовал решить это, но выдает вот такую ошибку
File "F:\Проги\прога\kivy_venv\lib\site-packages\kivy\lang\builder.py", line 55, in custom_callback
exec(__kvlang__.co_value, idmap)
File "<string>", line 140, in <module>
TypeError: MainApp.debit() takes 1 positional argument but 2 were given
Process finished with exit code 1
from kivy.lang import Builder
from kivy.properties import StringProperty, BooleanProperty
import sqlite3
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.screen import MDScreen
from kivymd.app import MDApp
from kivymd.theming import ThemableBehavior
Builder.load_string(
"""
#:import NoTransition kivy.uix.screenmanager.NoTransition
#:import Window kivy.core.window.Window
#:import IconLeftWidget kivymd.uix.list.IconLeftWidget
# Хзпока что это
<ItemBackdropFrontLayer@TwoLineAvatarListItem>
icon: "android"
IconLeftWidget:
icon: root.icon
<ItemBackdropBackLayer>
adaptive_height: True
spacing: "10dp"
md_bg_color:
root.theme_cls.primary_dark if root.selected_item else root.theme_cls.primary_color
MDIconButton:
icon: root.icon
theme_text_color: "Custom"
text_color: (1, 1, 1, .5) if not root.selected_item else (1, 1, 1, 1)
MDLabel:
text: root.text
color: (1, 1, 1, .5) if not root.selected_item else (1, 1, 1, 1)
# Круглые чекбоксы
<ItemBackdropBackLayerOfSecondScreen@BoxLayout>
size_hint_y: None
height: "40dp"
spacing: "25dp"
text: ""
MDCheckbox:
size_hint: None, None
size: "30dp", "30dp"
active: False or self.active
pos_hint: {"center_y": .5}
selected_color: 1, 1, 1, 1
MDLabel:
text: root.text
color: 1, 1, 1, .7
#квадратные чекбоксы
<ItemRoundBackdropBackLayerOfSecondScreen@BoxLayout>
size_hint_y: None
height: "40dp"
spacing: "25dp"
text: ""
MDCheckbox:
group: "size"
size_hint: None, None
size: "30dp", "30dp"
pos_hint: {"center_y": .5}
selected_color: 1, 1, 1, 1
MDLabel:
text: root.text
color: 1, 1, 1, .7
# Основная страница
<MyBackdropFrontLayer@ScrollView>
backdrop: None
backlayer: None
MDGridLayout:
adaptive_height: True
cols: 1
padding: "5dp"
ItemBackdropFrontLayer:
text: "Пополнение вклада"
secondary_text: "работает)"
icon: "bank-plus"
on_press:
root.backlayer.current = "third screen"
root.backdrop.open()
#????
<MyBackdropBackLayer@ScreenManager>
id: smanager
screen3: screen3
transition: NoTransition()
MDScreen:
name: "one screen"
ScrollView
#сетка из одной колонки
MDGridLayout:
adaptive_height: True
cols: 1
padding: "5dp"
#кликабельные кнопки первого окна
ItemBackdropBackLayer:
icon: "arrow-right-drop-circle"
text: "Мои накопления"
ItemBackdropBackLayer:
icon: "desktop-mac"
text: "Computers"
#второе окно
MDScreen:
name: "second screen"
ScrollView
MDGridLayout:
adaptive_height: True
cols: 1
padding: "15dp"
spacing: "10dp"
# надпись вверху
MDLabel:
text: "Второе окно"
font_size: 40
color: 1, 1, 1, 1
#третье окно
MDScreen:
name: "third screen"
id: screen3
summ: summ
ScrollView
MDBoxLayout:
adaptive_height: True
padding: "15dp"
spacing: "10dp"
# надпись вверху
MDLabel:
text: "Третье окно"
font_size: 40
color: 1, 1, 1, 1
ItemBackdropFrontLayer:
text: "Внести"
on_press:
app.debit(self)
MDTextField:
id: summ
hint_text: "Введите сумму пополнения"
font_size: 18
""")
Builder.load_string(
"""
<ExampleBackdrop>
MDBackdrop:
id: backdrop
on_open: print("on_open")
on_close: print("on_close")
left_action_items: [["menu", lambda x: self.open()]]
title: app.title
header_text: "Menu:"
MDBackdropBackLayer:
MyBackdropBackLayer:
id: backlayer
MDBackdropFrontLayer:
MyBackdropFrontLayer:
backdrop: backdrop
backlayer: backlayer
"""
)
class ExampleBackdrop(MDScreen):
pass
class ItemBackdropBackLayer(ThemableBehavior, MDBoxLayout):
icon = StringProperty("android")
text = StringProperty()
selected_item = BooleanProperty(False)
def on_touch_down(self, touch):
if self.collide_point(touch.x, touch.y):
for item in self.parent.children:
if item.selected_item:
item.selected_item = False
self.selected_item = True
return super().on_touch_down(touch)
class MainApp(MDApp):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.title = "Мои финансы"
self.theme_cls.primary_palette = "DeepPurple"
def build(self):
self.root = ExampleBackdrop()
def debit(self):
value = self.root_window.ids.summ.text
print(value)
if __name__ == "__main__":
MainApp().run()
Источник: Stack Overflow на русском