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.

¿Cómo conecto los ids de Spinner del archivo Kivy con los datos que proporciono desde mi base de datos de productos?

¿Cómo puedo conectar mis IDs al código de Python considerando que quiero cargar la cadena de la variable self.listcode en los valores del spinner? Ya uso self.ids. y no obtengo nada del archivo KV. Gracias de antemano por tu ayuda. Uno de los errores que aparece es el siguiente:

AtributoError: el objeto ‘super’ no tiene el atributo ‘getattr

Creo que si no me equivoco, tiene que ver con que Screen no tiene la posibilidad de acceder a las IDs.

ARCHIVO KIVY###

:
FirstWindow:

SecondWindow:

:
name: “menu”

canvas.before:    
    Color:
        rgba: (242/255, 202/255, 5/255, 1)        
    RoundedRectangle:
        size: self.size
        pos: self.pos
        radius: [55]


Image: 
    source: 'Logoapp.png';


BoxLayout:
    orientation: "horizontal"
    size: 50, 50    
    Button:
        font_size: 20
        size_hint: 0.3, 0.2
        pos_hint: {"x":.5, "top":.2}
        pos:100, 100
        background_color: 0,0,0,0
        text: "Cotizar"
        color: 0,0,0,1
        canvas.before:
            Color:
                rgba: (23/255,152/255,216/255,0.71)
            RoundedRectangle:
                size: self.size
                pos: self.pos
                radius:[55]

        on_release: 
            app.root.current = "cotiza"
            root.manager.transition.direction = "left"

:
name: “cotiza”
FloatLayout:
CodigoSpin:
id: “Cod_prod”
pos: 20, 100
Label:
text: “Descripcion”
pos: 20, 35
CodigoSpin:
id: “Cod_prod2”
pos: 20, 200
Label:
text: “Descripcion”
pos: 20, 130

    CodigoSpin:
        id: "Cod_prod3"
        pos: 20, 300  
        Label:
            text: "Descripcion"
            pos: 20, 235

<codigospin@spinner>:

size_hint: None, None
size: 100, 44
text: "CodigoSpin" 

PROGRAMA PRINCIPAL ##

from types import new_class
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.config import Config
from kivy.core.window import Window
from kivy.properties import ListProperty
from kivy.uix.spinner import Spinner, SpinnerOption
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.graphics import Color, Rectangle, RoundedRectangle
import sqlite3

Window.size = (250, 500 ) #Cambiamos el tamaño de la pantalla para que se ajuste a mi teléfono

from kivy.uix.textinput import TextInput
from kivy.uix.screenmanager import ScreenManager, Screen

class FirstWindow(Screen, FloatLayout):
pass

class SecondWindow(Screen, Widget):

def __init__(self, **kwargs):
        super(SecondWindow, self).__init__(**kwargs)

        #Creamos la conexión de la base de datos
        conn = sqlite3.connect("inventingt.db")
        cursor = conn.cursor()

        cursor.execute("""SELECT Codigo FROM masterinv""")
        rows = cursor.fetchall()

        #Creamos la variable lista de objetos de la base de datos
        self.listcode = [str(t[0]) for t in rows] 

        #Este método inicializará los valores en el Spinner

        self.inicializarvalores()



def inicializarvalores(self):
    self.ids.Cod_prod.values = self.listcode

class WindowManager(ScreenManager, Widget):

pass

class Buendes(App):
def build(self):
#Inicializamos el gestor de pantallas para inicializar las páginas

    self.window = WindowManager()
    #añadimos widgets a la ventana




    #Agregamos el botón para inicializar la aplicación

    #Conectamos una base de datos

    return self.window

if name == “main“:
Buendes().run()</codigospin@spinner>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para conectar los IDs del archivo Kivy con el código Python, puedes utilizar el diccionario ids que es creado automáticamente por Kivy. En tu caso, como quieres cargar la cadena de self.listcode en los valores del selector, puedes hacer lo siguiente:

    1. Agrega un id a tu widget de selector en el archivo Kivy. Por ejemplo, id: my_spinner.
    2. En el método inicializarvalores de tu clase SecondWindow, haz referencia al objeto my_spinner utilizando el diccionario self.ids y establece su atributo values en self.listcode.

    Aquí tienes un ejemplo:

    class SecondWindow(Screen, Widget):
    
        def __init__(self, **kwargs):
            super(SecondWindow, self).__init__(**kwargs)
    
            # Crear la conexión con la base de datos
            conn = sqlite3.connect('inventingt.db')
            cursor = conn.cursor()
    
            cursor.execute('''SELECT Codigo FROM masterinv''')
            rows = cursor.fetchall()
    
            # Crear la variable listcode de objetos de la base de datos
            self.listcode = [str(t[0]) for t in rows]
    
            # Este método inicializará los valores en el Selector
    
            self.inicializarvalores()
    
        def inicializarvalores(self):
            # Obtener el objeto selector utilizando su ID y establecer su atributo de valores
            self.ids.my_spinner.values = self.listcode
    

    Ten en cuenta que si recibes un AttributeError con el mensaje 'super' object has no attribute '__getattr__', esto puede ser causado por un error de sintaxis en tu código (por ejemplo, un paréntesis faltante, indentación incorrecta, etc.). Revisa tu código en busca de errores de sintaxis y corrígelos antes de intentar de nuevo.

Comments are closed.