es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Múltiples ventanas y TextField

Quiero crear una aplicación de Android para escanear códigos QR.
Ya tengo 2 ventanas (ScreenManager), una de ellas es como un ‘menú principal’ con un botón ‘escanear’ y un MDTextField.
Cuando hago clic en el botón ‘escanear’, la segunda ventana se ejecuta y funciona bien. Pero no sé cómo enviar el código leído al MDTextField en el ‘menú principal’.

<profilewindow>:
    name: 'segunda'
    MDBoxLayout:
        orientation: 'vertical'
        ZBarCam:
            id: qrcodecam
        MDLabel:
            adaptive_height: True
            md_bg_color: app.theme_cls.primary_color
            text: ''.join([str(symbol.data) for symbol in qrcodecam.symbols])

Otro problema es que cuando quiero establecer un valor en MDTextField, no puedo hacerlo. Creo que el problema está en esas ventanas. Uso:

self.root.ids.date_label.text = 'Cancelar'

pero recibo un error después de on_press:

AttributeError: el objeto 'super' no tiene el atributo '__getattr__'

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para enviar el código QR leído de vuelta al campo de texto MDTextField del menú principal, puedes crear un método en la ventana del menú principal que establezca el valor de MDTextField y luego llamar a ese método desde la segunda ventana después de leer el código.

    En la ventana del menú principal, agrega un método como este:

    class MainMenuWindow(Screen):
        # otros métodos y propiedades aquí
    
        def set_qr_code(self, code):
            self.ids.qr_code_field.text = code
    

    Luego, en la segunda ventana, después de leer el código, llama a ese método:

    class ProfileWindow(Screen):
        # otros métodos y propiedades aquí
    
        def on_qr_code_read(self, code):
            main_menu = self.manager.get_screen('main')
            main_menu.set_qr_code(code)
    

    Esto asume que el nombre de la pantalla del menú principal es ‘main’ y que la ID del MDTextField en la pantalla del menú principal es ‘qr_code_field’. Ajusta estos nombres según sea necesario para tu aplicación específica.

    Respecto al problema con establecer el valor de MDTextField, es difícil decirlo sin ver más del código. El mensaje de error sugiere que es posible que la ID ‘date_label’ no esté definida en el contexto actual. Verifica que la ID esté escrita correctamente y que exista en el archivo .kv correspondiente. También puede ayudar usar el diccionario ids directamente en lugar de pasar por self.root.ids. Por ejemplo:

    self.ids.date_label.text = 'Cancelar'
    

Comments are closed.