Ids en kivyMD
Publicado por Jorge Alberto (50 intervenciones) el 27/08/2021 00:00:21
Hola, cómo están? Estoy practicando con kivyMD, pero como siempre tengo problemas con las ids. Lo que estoy "creando" es un juego simple y conocido (el ahorcado). Pero cuando intento referenciar algo, me sale el error 'Something' object has no attribute ids. Les paso el código del archivo py:
y del archivo kv:
En este caso, el error que arroja es:
Si intento modificar la línea 22 a
el error que arroja es similar:
Lo raro es que ya había hecho lo mismo en otro programa y no tuve ningún problema. No entiendo por qué ahora no funciona. ¿Alguna idea?
PD: si quieren ver un bosquejo de lo que intento hacer, quiten la línea 22 e imaginen que en vez de WORD dice _ _ _ _ (un _ por cada letra). La idea es que la persona elige una letra: si es parte de la palabra, lo modifica; si no, suma un error y empieza a dibujar a una persona.
En fin, eso es todo. Gracias.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from kivymd.app import MDApp
from kivy.lang import Builder
from random import choice
class MainAhorcadoApp(MDApp):
list_of_words = ['HOLA', 'AHORCADO', 'PALABRA']
def build(self):
self.theme_cls.secondary_color = 'Teal'
self.theme_cls.accent_palette = 'BlueGray'
self.new_game()
return Builder.load_file('ahorcado.kv')
def new_game(self):
'''
Chose a word from the list, replace the letters with a "_" and add the widgets to the screen
'''
word = choice(self.list_of_words)
self.root.ids.the_word.text = word
print(word)
def exitapp(self):
MDApp.get_running_app().stop()
if __name__ == '__main__':
MainAhorcadoApp().run()
y del archivo kv:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
MDBoxLayout:
orientation: "vertical"
MDRelativeLayout:
# Acá se dibuja el ahorcado
MDLabel:
# Acá se dibujará el hombre
id: hang_man
size_hint: 0.3, 1
canvas:
Color:
rgba: 1, 0, 0, 1
Line:
points: self.width * .1, self.height * .1, self.width * .7, self.height * .1
width: 4
Line:
points: self.width * .15, self.height * .1, self.width * .15, self.height * .8
width: 4
Line:
points: self.width * .15, self.height * .8, self.width * .6, self.height * .8
width: 4
Line:
points: self.width * .6, self.height * .8, self.width * .6, self.height * .7
width: 4
MDLabel:
# Acá figura la palabra a descubrir
id: the_word
size_hint: (.7, 1)
pos_hint: {'right': 1}
text: 'Word'
En este caso, el error que arroja es:
1
2
3
File "c:/kivymd/ahorcado.py", line 22, in new_game
self.root.ids.the_word.text = word
AttributeError: 'NoneType' object has no attribute 'ids'
Si intento modificar la línea 22 a
1
self.ids.the_word.text = word
1
2
3
File "c:/kivymd/ahorcado.py", line 22, in new_game
self.ids.the_word.text = word
AttributeError: 'MainAhorcadoApp' object has no attribute 'ids'
Lo raro es que ya había hecho lo mismo en otro programa y no tuve ningún problema. No entiendo por qué ahora no funciona. ¿Alguna idea?
PD: si quieren ver un bosquejo de lo que intento hacer, quiten la línea 22 e imaginen que en vez de WORD dice _ _ _ _ (un _ por cada letra). La idea es que la persona elige una letra: si es parte de la palabra, lo modifica; si no, suma un error y empieza a dibujar a una persona.
En fin, eso es todo. Gracias.
Valora esta pregunta


0