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

如何通过Kivy中.py文件内的按钮修改.kv文件内按钮的文本?

问题解决:点击Python按钮修改KV文件中按钮文本

你的代码核心问题是:绑定事件时调用了Start().test1(),这会创建一个全新的Start实例,你修改的是这个新实例里的按钮文本,和当前界面上显示的Start对象完全无关,所以看不到变化。

正确解决方案

要确保操作的是当前界面已存在的Start实例,同时KV文件里的按钮需要通过id被Python代码访问,具体分两种情况:

1. 按钮btn1在Start类内部创建

假设你的KV文件定义如下(给目标按钮设置id):

<Start>:
    MDRaisedButton:
        id: button
        text: "初始文本"
        pos_hint: {"center_x":0.5, "center_y":0.4}

Python代码修正:

from kivymd.app import MDApp
from kivymd.uix.floatlayout import MDFloatLayout
from kivymd.uix.button import MDRaisedButton

class Start(MDFloatLayout):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # 内部创建btn1按钮
        self.btn1 = MDRaisedButton(
            text="点击修改文本",
            pos_hint={"center_x":0.5, "center_y":0.6}
        )
        # 绑定到当前实例的test1方法,直接传self.test1
        self.btn1.bind(on_release=self.test1)
        self.add_widget(self.btn1)

    def test1(self, instance):
        # 通过ids获取KV里的按钮
        self.ids.button.text = 'Hello'

class TestApp(MDApp):
    def build(self):
        return Start()

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

2. 按钮btn1在外部创建(比如App的build方法中)

Python代码修正:

from kivymd.app import MDApp
from kivymd.uix.floatlayout import MDFloatLayout
from kivymd.uix.button import MDRaisedButton

class Start(MDFloatLayout):
    def test1(self, instance):
        self.ids.button.text = 'Hello'

class TestApp(MDApp):
    def build(self):
        # 先创建界面上的Start实例
        start_layout = Start()
        # 外部创建btn1按钮
        btn1 = MDRaisedButton(
            text="点击修改文本",
            pos_hint={"center_x":0.5, "center_y":0.6}
        )
        # 绑定到已存在的start_layout实例的test1方法
        btn1.bind(on_release=start_layout.test1)
        start_layout.add_widget(btn1)
        return start_layout

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

关键注意点

  • 禁止在事件绑定中使用Start().test1(),这会生成新实例,和当前界面无关联。
  • KV文件中的目标按钮必须设置id,才能通过self.ids.按钮id在Python代码中访问。
  • 绑定的方法需要接收按钮实例参数(比如test1(self, instance)),Kivy会自动传递该参数,不可省略。

内容的提问来源于stack exchange,提问作者Влад Лось

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:33:01