You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python Kivy框架中使用OOP实现按钮点击数值自增

问题原因
  • 你自定义的location类是普通Python类,没有继承Kivy的EventDispatcher,Kivy无法监听到类内属性的变更,所以UI不会自动更新。
  • Kivy的NumericProperty必须定义为类属性才能触发绑定逻辑,你直接把它作为参数传给location的构造方法是错误用法,无法实现响应式更新。
修改后的完整代码

Python代码

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import NumericProperty
from kivy.event import EventDispatcher

# 自定义类继承EventDispatcher才能支持属性绑定
class Location(EventDispatcher):
    # 数值属性必须定义为类级别的NumericProperty
    total_house = NumericProperty(0)
    total_land = NumericProperty(0)

    def __init__(self, total_house, total_land, **kwargs):
        super().__init__(**kwargs)
        self.total_house = total_house
        self.total_land = total_land


class Test(BoxLayout):
    def addNum(self):
        App.get_running_app().x.total_house += 1

class TestApp(App):
    # 实例化时直接传数值即可
    x = Location(10, 5)


TestApp().run()

KV代码(无需修改,沿用原有逻辑即可)

<Test>:
    orientation: 'vertical'
    Label:
        text: str(app.x.total_house)
    Button:
        text: 'add'
        on_press: root.addNum()
效果说明

修改后初始页面会显示10,每点击一次add按钮,数值就会自动加1,完全符合预期。

内容的提问来源于stack exchange,提问作者DanYTz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 16:24:04