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

使用SplashScreen时跨.kv文件访问登录屏幕报错求助

Kivy闪屏跳转登录页面错误解决:TypeError: 'StringProperty' object is not callable

问题背景

设计应用启动闪屏,显示Logo后3秒自动跳转登录页面,闪屏和登录页面分别在独立.kv文件中,但运行时出现错误:TypeError: 'kivy.properties.StringProperty' object is not callable,无法访问登录屏幕。

错误原因分析

  1. 类名冲突:自定义的ScreenManager类与Kivy内置的ScreenManager重名,导致逻辑混乱。
  2. 屏幕切换代码错误:self.manager.current = login.Screen.name('login')中,Screen.name是Kivy的StringProperty属性,不是可调用方法,不能加();且当前类本身就是ScreenManager实例,无需通过self.manager访问,直接用self.current即可。
  3. build方法无效返回:build方法中第一个return会终止执行,第二个return永远不会被调用,且logo.kv已通过#:include引入login.kv,无需重复加载。
  4. 未定义SplashScreen类:logo.kv中使用的SplashScreen未在Python代码中定义,需改为内置Screen或自定义该类。

修正后的代码

main.py

from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.clock import Clock
from kivymd.app import MDApp
from kivy.lang import Builder

# 自定义ScreenManager,避免与内置类重名
class MainScreenManager(ScreenManager):
    def on_enter(self, *args):
        # 调度3秒后执行页面切换
        Clock.schedule_once(self.switch_to_login, 3)
    
    def switch_to_login(self, dt):
        # 直接设置当前屏幕为登录页
        self.current = 'login'

# 定义闪屏页面类
class SplashScreen(Screen):
    pass

class StartPage(MDApp):
    def build(self):
        # 仅加载logo.kv,login.kv已被include
        return Builder.load_file('logo.kv')

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

logo.kv

#:include login.kv
MainScreenManager:
    SplashScreen:
        name: 'Splash'
        MDLabel:
            text: "LOGO"
            pos_hint: {"center_x": 0.5, "center_y": 0.5}

login.kv

Screen:
    name:'login'
    MDLabel:
        text: "LOGIN"
        pos_hint: {"center_x": 0.5, "center_y": 0.5}

关键修正点说明

  • 重命名自定义ScreenManager为MainScreenManager,避免类名冲突。
  • 定义SplashScreen类继承自Screen,对应kv文件中的组件。
  • 页面切换时直接给self.current赋值目标屏幕的名称字符串'login',而非调用属性。
  • 移除build方法中无效的第二个return,确保仅加载一次kv文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 04:24:14