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

如何从.kv文件修改Python变量的值?Kivy新手技术求助

解决Kivy按钮点击修改变量并触发输出的问题

你的代码有几个关键问题导致预期效果没实现,我给你拆解并修正:

问题分析

  • 全局变量无法在kv中直接访问:你定义的experience是全局变量,kv文件的作用域绑定的是对应的experienceScreen实例,直接写experience=1只会在kv的局部作用域创建新变量,根本改不到py里的全局变量。
  • 判断代码只执行一次:你写的if experience == ...是在workoutApp().run()启动前执行的(run方法是阻塞的,程序启动时先跑完这些判断,之后点击按钮不会再触发),所以即使变量改了也不会打印。
  • 错误的赋值与未调用的函数:beginnerpressed里用了==(比较运算符)而不是=(赋值运算符),而且这个函数从来没被按钮绑定调用。

修正后的代码

Python文件

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import NumericProperty

class experienceScreen(Widget):
    # 用Kivy的NumericProperty定义可监听的实例变量
    experience = NumericProperty(0)

    def on_experience(self, instance, value):
        # 监听experience的变化,值改变时自动触发该方法
        if value in (1,2,3):
            print("test code works.")

class workoutApp(App):
    def build(self):
        return experienceScreen()

if __name__ == "__main__":
    workoutApp().run()

Kivy文件

#: kivy 2.1.0

<experienceScreen>:
    FloatLayout:
        pos:0,0
        size: root.width, root.height
        Label:
            text: "What level of gym go-er are you?"
            pos_hint: {'x':.4,'y':.85}
            size_hint:0.2,0.1
        Button:
            text: "Beginner"
            pos_hint: {'x':.25,'y':.6}
            size_hint:0.5,0.1
            on_press: root.experience = 1
        Button:
            text: "Intermediate"
            pos_hint: {'x':.25,'y':.4}
            size_hint:0.5,0.1
            on_press: root.experience = 2
        Button:
            text: "Advanced"
            pos_hint: {'x':.25,'y':.2}
            size_hint:0.5,0.1
            on_press: root.experience = 3

关键修改说明

  1. 用Kivy属性替代全局变量:把experience定义为experienceScreen的NumericProperty,这样它能被Kivy的绑定系统识别,kv文件可以通过root.experience访问,而且属性变化时能自动触发回调方法。
  2. 监听属性变化实现打印:on_experience是Kivy的自动回调方法,只要experience的值改变就会触发,点击按钮修改值后就能立即打印内容。
  3. kv中正确引用实例属性:按钮的on_press改成root.experience = 1,直接修改Widget实例的属性,而不是创建局部变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 02:55:14