【问题标题】:How to use on_enter event to change screens on kivy?如何使用 on_enter 事件更改 kivy 上的屏幕?
【发布时间】:2017-12-15 14:01:38
【问题描述】:

所以,这就是我想要做的:在我的应用程序的第一个屏幕上输入时,我希望它检查给定目录中是否存在某些文件。如果它们存在,我希望它立即切换到另一个屏幕。

我尝试了以下方法:

main.py

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from os import listdir

class Manager(ScreenManager):
    pass

class CreateFileScreen(Screen):

    def on_enter(self):
        try:
            files = listdir("data/files")
            if "file.dat" in files:
                self.parent.current = "login"
            else:
                pass
        except FileNotFoundError:
            pass

class LoginScreen(Screen):
    pass

class ExampleApp(App):

    def build(self):
        return Manager()

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

example.kv

#:kivy 1.10.0

<CreateFileScreen>:
    BoxLayout:
        Label:
            text: "This is Create File Screen"
            font_size: "30sp"

<LoginScreen>:
    BoxLayout:
        Label:
            text: "This is Login Screen"
            font_size: "30sp"

<Manager>:

    CreateFileScreen:
        name: "createfile"
    LoginScreen:
        name: "login"

file.dat 确实存在于data/files 中时,我收到以下错误: kivy.uix.screenmanager.ScreenManagerException: 没有名称为“login”的屏幕。

知道如何解决这个问题吗?

【问题讨论】:

    标签: python-3.x kivy kivy-language


    【解决方案1】:

    问题是on_enter 在屏幕获得名称之前执行。
    你可以创建一个change_screen 方法,然后用Clock.schedule_once 调用它。这样它将被称为下一帧。

    from kivy.clock import Clock
    
    class CreateFileScreen(Screen):
    
        def on_enter(self):
            Clock.schedule_once(self.change_screen)
    
        def change_screen(self, dt):
            try:
                files = listdir("data/files")
                if "file.dat" in files:
                    self.manager.current = "login"
                else:
                    pass
            except Exception as e:
                print(e)
    

    【讨论】:

      猜你喜欢
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多