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

如何在Python中引用.kv页面并编写跳转至下一个窗口的函数

在Python中实现动态按钮的页面跳转(对应KV里的root.manager.current = 'EditPage')

核心逻辑很简单:只要拿到ScreenManager的实例,修改它的current属性为目标页面的名称,就能实现和KV代码里一样的跳转效果。下面分场景给你具体实现方式:

场景1:在Screen类内部动态创建按钮

如果你的按钮是在某个Screen子类里创建的,直接用self.manager就能拿到对应的ScreenManager,代码示例如下:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.button import Button

class MainPage(Screen):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # 调用方法创建动态按钮
        self.make_dynamic_button()

    def make_dynamic_button(self):
        # 先创建按钮,参数和KV里的一致
        jump_btn = Button(
            size_hint_y=0.05,
            size_hint_x=0.25,
            background_color=(0,0,0,0),
            pos_hint={"center_y":0.04, "x":0.71}
        )
        # 绑定点击事件到自定义跳转函数
        jump_btn.bind(on_press=self.go_to_edit_page)
        self.add_widget(jump_btn)

    def go_to_edit_page(self, btn_instance):
        # 和KV里的root.manager.current = 'EditPage'完全等价
        self.manager.current = 'EditPage'

class EditPage(Screen):
    # 这里是你的EditPage内容
    pass

class MyApp(App):
    def build(self):
        sm = ScreenManager()
        # 注册页面,name要和跳转时用的一致
        sm.add_widget(MainPage(name='MainPage'))
        sm.add_widget(EditPage(name='EditPage'))
        return sm

if __name__ == '__main__':
    MyApp().run()

场景2:在Screen外部动态创建按钮

如果按钮是在其他地方(比如App类里)创建的,需要先拿到ScreenManager的引用,再修改它的current属性:

class MyApp(App):
    def build(self):
        # 先创建ScreenManager并保存引用
        self.screen_manager = ScreenManager()
        self.screen_manager.add_widget(MainPage(name='MainPage'))
        self.screen_manager.add_widget(EditPage(name='EditPage'))

        # 在App里创建动态按钮
        jump_btn = Button(
            size_hint_y=0.05,
            size_hint_x=0.25,
            background_color=(0,0,0,0),
            pos_hint={"center_y":0.04, "x":0.71}
        )
        jump_btn.bind(on_press=self.switch_to_edit)
        # 把按钮添加到指定页面
        self.screen_manager.get_screen('MainPage').add_widget(jump_btn)

        return self.screen_manager

    def switch_to_edit(self, btn_instance):
        self.screen_manager.current = 'EditPage'

关键注意点

  • KV里定义的页面名称(比如<EditPage>对应的name)必须和Python中注册时的name参数完全一致,否则会找不到页面
  • 不管按钮是动态还是静态创建,跳转的核心都是修改ScreenManager的current属性,这和KV代码里的逻辑完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:50:22