Puzzle des variables globales du fichier Kivy .kv
J'ai déclaré certaines constantes de couleur en tant que variables globales dans le fichier.kv. Ils fonctionnent dans certaines situations mais pas dans d'autres. Un exemple ColorConstants.kv
est
#:kivy 2.0.0
#:set BLUE (0, 0, 1, 1)
#:set WHITE (1, 1, 1, 1)
<Header@BoxLayout>:
# color constants don't work here: NoneType errors
# font_color: WHITE
# header_color: BLUE
# need to use numeric lists for font_color, header_color
font_color: (1, 1, 1, 1)
header_color: (0, 0, 1, 1)
header_text: ""
size_hint: 1, None
height: dp(50)
canvas.before:
Color:
rgba: self.header_color
Rectangle:
size: self.size
pos: self.pos
Label:
color: root.font_color
text: root.header_text
bold: True
BoxLayout:
orientation: "vertical"
Header:
header_text: "My Header"
Label:
# color constants work here, no errors
color: BLUE
text: "This is blue text on white"
canvas.before:
Color:
rgba: WHITE
Rectangle:
size: self.size
pos: self.pos
Accompagnant ColorConstants.py
:
from kivy.app import App
class ColorConstantsApp(App):
pass
ColorConstantsApp().run()
Je ne comprends pas pourquoi je peux utiliser BLUE
et WHITE
dans Label
mais pas dans Header
. Si j'utilise WHITE
et BLUE
pour font_color
et header_color
au lieu de (1,1,1,1)
et (0,0,1,1)
, je rencontre une TypeError: 'NoneType' object is not iterable
erreur.
Solution du problème
Il semble que les instructions de canevas soient créées avant que le header_color
ne soit attribué. Vous pouvez contourner cela en modifiant:
rgba: self.header_color
pour:
rgba: self.header_color if self.header_color else (0,1,0,1)
Cela vérifie simplement si header_color
est None
et utilise autre chose dans ce cas. Ensuite, lorsque header_color
est attribué, la couleur correcte est utilisée.
Commentaires
Enregistrer un commentaire