使用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
相关产品推荐
相关产品推荐

