Kivy ids en código python

principal:

from kivy.app import App from kivy.uix.button import Button from kivy.uix.screenmanager import ScreenManager, Screen from kivy.uix.boxlayout import BoxLayout from kivy.uix.gridlayout import GridLayout from kivy.uix.label import Label from kivy.uix.textinput import TextInput from kivy.uix.widget import Widget class testclass: def someth(txt): print (txt) #how get access to textinput from begin Screen here? class BeginScreen(Screen): def __init__(self,**kwargs): super().__init__() self.layout =BoxLayout(orientation='vertical',padding=20,spacing=5,) self.btn=Label(text=str('Hello')) self.layout.add_widget(self.btn) self.btn=TextInput(id='test',text='') self.layout.add_widget(self.btn) self.btn=Button(text='Button!', on_press=testclass.someth('?')) # what write in ? to send textinput text to testclass.someth? self.layout.add_widget(self.btn) self.add_widget(self.layout) print(self.layout.ids) #why i have no ids? textinput have id class TestApp(App): from kivy.config import Config Config.set('graphics', 'width', '800') Config.set('graphics', 'height', '400') def build(self): sm = ScreenManager() sm.add_widget(BeginScreen(name='test')) return sm TestApp().run() 

Entonces, ¿cómo puedo acceder a la entrada de texto? Tengo id = ‘prueba’, pero cuando estoy imprimiendo diseños, id está diciendo que no tengo a nadie. ¿Por qué? Alguien me puede explicar qué estoy haciendo mal y cómo puedo hacerlo bien.

desde functools import parcial

Para acceder a la entrada de texto en su método externo, puede usar funciones parciales o la función lambda.

self.ids

No está obteniendo ninguno o un diccionario vacío porque no tiene un archivo kv.

Nota

Cuando se analiza el archivo kv, kivy recostack todos los widgets etiquetados con ID y los coloca en esta propiedad de tipo self.ids dictionary.

Por favor, consulte mi ejemplo a continuación para los detalles.

Ejemplo

main.py

 from kivy.app import App from kivy.uix.button import Button from kivy.uix.screenmanager import ScreenManager, Screen from kivy.uix.boxlayout import BoxLayout from kivy.uix.label import Label from kivy.uix.textinput import TextInput from functools import partial class testclass: def someth(*args, txt): print(txt) class BeginScreen(Screen): def __init__(self, **kwargs): super(BeginScreen, self).__init__(**kwargs) layout = BoxLayout(orientation='vertical', padding=20, spacing=5) layout.add_widget(Label(text=str('Hello'))) layout.add_widget(TextInput(id='test', text='')) layout.add_widget(Button(text='Button!', on_press=partial(testclass.someth, txt='?'))) self.add_widget(layout) print("self.ids={}".format(self.ids)) class TestApp(App): from kivy.config import Config Config.set('graphics', 'width', '800') Config.set('graphics', 'height', '400') def build(self): sm = ScreenManager() sm.add_widget(BeginScreen(name='test')) return sm TestApp().run() 

Salida

Botón presionado