Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何使用on_enter事件更改kivy上的屏幕?_Python 3.x_Kivy_Kivy Language - Fatal编程技术网

Python 3.x 如何使用on_enter事件更改kivy上的屏幕?

Python 3.x 如何使用on_enter事件更改kivy上的屏幕?,python-3.x,kivy,kivy-language,Python 3.x,Kivy,Kivy Language,所以,我想做的是:当我进入应用程序的第一个屏幕时,我希望它检查给定目录中是否存在一些文件。如果它们存在,我希望它立即切换到另一个屏幕 我尝试了以下方法: main.py from kivy.app import App from kivy.uix.screenmanager import ScreenManager, Screen from os import listdir class Manager(ScreenManager): pass class CreateFileScr

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

我尝试了以下方法:

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()
例1.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"
#:kivy 1.10.0
:
盒子布局:
标签:
文本:“这是创建文件屏幕”
字体大小:“30sp”
:
盒子布局:
标签:
文本:“这是登录屏幕”
字体大小:“30sp”
:
创建文件屏幕:
名称:“创建文件”
登录筛选:
名称:“登录”
file.dat
确实存在于
data/files
中时,我得到以下错误: kivy.uix.screenmanager.screenmanager异常:没有名为“登录”的屏幕。


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

问题是在屏幕命名之前,enter上的
被执行。
您可以创建一个
change\u屏幕
方法,然后用
Clock.schedule\u调用一次
。这样,它将被称为下一帧

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)