Kivy 2.1.0中kv文件用if条件修改Label文本报错求解
报错根因
报错是kv里的条件判断写法错误导致的:
myswitch.on_press是按钮的按压事件绑定入口,不是存储按压状态的属性,直接在kv表达式里引用这个字段会触发事件绑定流程,因为缺少回调参数直接抛出TypeError。- Kivy Button的按压状态存在
state属性里,只有两个取值:'normal'是未按压状态,'down'是正在被按压的状态,要判断按压状态应该读这个属性。
修复方案
只需要修改kv中第二个Label的text判断逻辑,把原来判断on_press的写法改成判断state即可,kv的自动属性绑定会在按钮状态变化时自动刷新Label文本,不需要额外写Python层的更新代码。
修复后的完整代码:
from kivy.app import App from kivy.lang import Builder kv =''' BoxLayout: Label: id:counter_text text:'0' Label: text: 'Number increases' if myswitch.state == 'down' else 'number added 1' Button: id:myswitch text:'COUNTER' on_press:app.increment() Button: text:'RESET' on_press:app.reset() ''' class CounterApp(App): counter = 0 def build(self): return Builder.load_string(kv) def increment(self): self.counter += 1 print(self.counter) self.root.ids.counter_text.text= str(self.counter) def reset(self): self.counter = 0 print(self.counter) self.root.ids.counter_text.text = str(self.counter) if __name__ == '__main__': CounterApp().run()
运行效果
- 按住COUNTER按钮时,第二个Label自动显示
Number increases - 松开按钮后自动切回
number added 1 - 原有计数、重置功能正常,不会再出现参数缺失报错。
内容的提问来源于stack exchange,提问作者yottabyte
相关产品推荐
相关产品推荐

