¿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>
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 deself.listcode
en los valores del selector, puedes hacer lo siguiente:id
a tu widget de selector en el archivo Kivy. Por ejemplo,id: my_spinner
.En el método
inicializarvalores
de tu claseSecondWindow
, haz referencia al objetomy_spinner
utilizando el diccionarioself.ids
y establece su atributovalues
enself.listcode
.Aquí tienes un ejemplo:
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.