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

使用root.manager.transition时出现Invalid Property Name错误的修复方案

问题修复方案

错误原因

ScreenManager默认使用NoTransition过渡效果,该过渡类没有direction属性,直接对其赋值就会触发"Invalid Property Name"错误。只有SlideTransition、CardTransition这类支持方向控制的过渡类,才具备direction属性。


修复方法

方法1:在Python代码中指定过渡类型

修改build方法,给ScreenManager添加支持方向的过渡效果(以SlideTransition为例):

from kivymd.app import MDApp
from kivy.uix.screenmanager import ScreenManager, SlideTransition  # 导入SlideTransition
from kivy.core.window import Window
from kivy.lang import Builder

Window.size = (310,580)
Builder.load_file("login.kv")


class MyApp(MDApp):

    def build(self):
        screen_manager = ScreenManager()
        screen_manager.transition = SlideTransition()  # 设置过渡类型
        screen_manager.add_widget(Builder.load_file('main.kv'))
        return screen_manager


MyApp().run()

方法2:在KV文件中定义ScreenManager并配置过渡

将ScreenManager的定义移到KV文件中,直接在KV里指定过渡效果:

修改main.kv内容:

ScreenManager:
    transition: SlideTransition()  # 定义支持方向的过渡类型
    MDScreen:
        name:"main"
        MDFloatLayout:
            md_bg_color: 0.149,0.654,0.352,1
        Image:
            source: "main_photo_1.png"
            pos_hint: {"center_x": .5, "center_y": .65}
            size_hint: .5,.5
        MDLabel:
            text: "welcome"  # 移除多余的单引号
            font_size: 30
            pos_hint: {"center_y": .34}
            halign: "center"
            color: 34/255, 34/255, 34/255, 1  # Kivy颜色值范围为0-1,需转换原255刻度值
        Button:
            text: ""
            size_hint: .66, .065
            background_color: 0,0,0,0
            Image:
                source: "log in.png"
                center_x: self.parent.center_x
                center_y: self.parent.center_y
            on_press:
                root.transition.direction = 'left'  # 直接操作ScreenManager的transition属性
                root.current = "login"

修改Python代码,直接加载KV文件即可:

from kivymd.app import MDApp
from kivy.core.window import Window
from kivy.lang import Builder

Window.size = (310,580)
Builder.load_file("login.kv")


class MyApp(MDApp):

    def build(self):
        return Builder.load_file('main.kv')


MyApp().run()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 14:46:01