学习记录之kivy
分享原因是,在网上查了许多的资料,看到的都是单纯的文本拼接,而且试过之后都没办法达到要求,因此分享一个另类的实现方式。下面展示:
示例main.py
from kivy.app import App
from kivy.properties import NumericProperty, ListProperty, StringProperty
class CounterApp(App):
counter = NumericProperty(0)
level_colors = ListProperty([0.2, 0.6, 1, 1])
button_text = StringProperty() # 新增文本属性
level_desc = StringProperty("Newbie") # 新增等级描述属性
def on_start(self):
self.update_text() # 初始化文本
def increment_counter(self):
self.counter += 1
self.update_level()
self.update_text()
def update_level(self):
levels = {
0: {"color": [0.2, 0.6, 1, 1], "desc": "Newbie"},
5: {"color": [0.3, 0.8, 0.4, 1], "desc": "Advanced"},
10: {"color": [0.9, 0.5, 0.1, 1], "desc": "Expert"},
15: {"color": [0.8, 0.1, 0.1, 1], "desc": "Master"}
}
current_level = max(
[key for key in levels.keys() if key <= self.counter],
default=0
)
self.level_colors = levels[current_level]["color"]
self.level_desc = levels[current_level]["desc"]
def update_text(self):
# 生成带换行的完整文本
self.button_text = (
f"Click to Increment\n"
f"Current: {self.counter}\n"
f"Level: {self.level_desc}"
)
if __name__ == '__main__':
CounterApp().run()
配套示例kv文件
#counterapp.kv
BoxLayout:
orientation: 'vertical'
padding: 20
spacing: 10
Label:
text: app.button_text # 直接使用生成的文本
font_size: '20sp'
halign: 'center'
valign: 'middle'
size_hint_y: 0.3
text_size: self.width, None
line_height: 1.2
Button:
text: app.button_text # 绑定预生成的文本
font_size: '16sp'
bold: True
on_press: app.increment_counter()
size_hint_y: 0.4
background_color: app.level_colors
text_size: self.width*0.9, None
halign: 'center'
valign: 'middle'
line_height: 1.2
Button:
text: 'Reset Counter\\n(Back to Newbie)'
font_size: '16sp'
on_press:
app.counter = 0
app.update_level()
app.update_text() # 重置时更新文本
size_hint_y: 0.3
background_color: 0.9, 0.3, 0.3, 1
text_size: self.width*0.9, None
halign: 'center'
valign: 'middle'