我从 MDCard (kivyMD) 创建了一个自定义小部件:
# layout.kv
<CustomMenuCard>
id: menu_card
# variables
label_text: self.label_text
progress_value: self.progress_value
player_level: self.player_level
orientation: "vertical"
focus_behavior: True
ripple_behavior: True
padding: "5sp", "5sp"
on_press: root.start_exercise(self)
MDBoxLayout:
orientation: "vertical"
pos_hint: {'center_x': .5, 'center_y': .5}
MDLabel:
text: menu_card.label_text
font_size: self.width * 0.15 if self.width*0.15 < 20 else 20
halign: "center"
size_hint_y: None
MDBoxLayout:
adaptive_height: False
padding: "10sp", "-20sp", "10sp", 0
MDLabel:
text: menu_card.player_level
font_size: "10sp"
size_hint: 0.4, None
halign: 'center'
pos_hint: {"center_x": 0.5, "center_y": .5}
theme_text_color: "Primary"
MDProgressBar:
value: menu_card.progress_value
color: app.theme_cls.accent_color
# app.py
class CustomMenuCard(MDCard):
label_text: StringProperty('')
progress_value: NumericProperty()
player_level: StringProperty('')
pass
它工作正常,如果我在使用它之前重新创建卡。而不是任何其他方式。
所以,这行得通;
<MenuScreen>:
BoxLayout:
orientation: 'vertical'
padding: 2, 2
GridLayout:
cols: 2
spacing: 10
padding: 7, 7
MDCard:
# same code as above
# ...
CustomMenuCard:
label_text: 'Substraction'
progress_value: 6
player_level: 'L3'
# And another 2
# ...
但这不会:
<MenuScreen>:
BoxLayout:
orientation: 'vertical'
padding: 2, 2
GridLayout:
cols: 2
spacing: 10
padding: 7, 7
CustomMenuCard:
label_text: 'Substraction'
progress_value: 6
player_level: 'L3'
# And another 3
# ...
错误:
Traceback (most recent call last):
File "/home/echologic/.local/lib/python3.7/site-packages/kivy/lang/builder.py", line 696, in _apply_rule
setattr(widget_set, key, value)
File "kivy/weakproxy.pyx", line 35, in kivy.weakproxy.WeakProxy.__setattr__
File "kivy/properties.pyx", line 497, in kivy.properties.Property.__set__
File "kivy/properties.pyx", line 1526, in kivy.properties.AliasProperty.set
File "/home/echologic/.local/lib/python3.7/site-packages/kivy/uix/progressbar.py", line 46, in _set_value
value = max(0, min(self.max, value))
TypeError: '<' not supported between instances of 'NoneType' and 'float'