Python/Kivy 屏幕转换

标签 python class kivy

在 Kivy for Python 中,我想知道如何安排屏幕在指定的秒数后自动转换到新屏幕。我使用 Kivy Clock 工具安排了一个事件,但当我运行应用程序时,它对我的​​代码没有响应。这是我的 main.py 代码:

class Opening_Screen():

       def __init__(self, **kwargs):
              super(Opening_Screen, self).__init__(**kwargs)
              Clock.schedule_once(self.change_screen, 5)

       def change_screen(self, *kwargs):
              root.current = 'Options_Screen'


class Patient_Care(App):
     pass

if __name__ == '__main__':

     Patient_Care().run()

这是我相应的.kv文件代码:

#:import C kivy.utils.get_color_from_hex
#:import RiseInTransition kivy.uix.screenmanager.RiseInTransition


ScreenManager:
     transition: RiseInTransition()

      Screen: 
           name: 'Opening_Screen'

           Label:
               text:'Welcome'
               font_size: 40 
               color: 0, 0, 1, 1 
               pos:(self.x / 2, 250) 

           Button:
               size_hint: (1, None)
               height: 90
               font_size: 30
               background_normal: 'button_normal.png'
               background_down: 'button_down.png'
               border: (2, 2, 2, 2)
               text: 'Continue'
               on_press: root.current = 'Options_Screen'





      Screen:
           name: 'Options_Screen'

           GridLayout:
               padding: 15
               rows: 5
               spacing: 10

               Button:
                   text:'Option 1'

               Button:
                   text:'Option 2'

               Button: 
                   text: 'Option 3'

               Button:
                   text: 'Option 4'

               Button:
                   text: 'Option 5'

在我的 .kv 文件中,我有另一个屏幕,称为“Options_Screen”。我想在 5 秒后从“Opening_Screen”切换到选项屏幕。当我为 Opening_Screen 创建一个按钮并将其设计为切换到 Options_Screen (on_press: root.current = 'Options_Screen') 时,该转换起作用。但是,我的目标是使用 Clock.schedule_once 函数动态切换,无需按下按钮即可自动切换。

最佳答案

由于您没有显示重现错误所需的代码,例如应用程序必须以 App 结尾,并且 .kv 的名称必须是小写的类的其余部分。另一个可能的错误是 Opening_Screen 不继承任何类型,因此它可能永远不会被调用,等等。

所以我只提供一个例子:

病人护理.kv

ScreenManager
    Opening_Screen:
        name: 'Opening_Screen'
    Options_Screen:
        name: 'Options_Screen'


<Opening_Screen>:
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'Opening_Screen'

<Options_Screen>:
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'Options_Screen'

ma​​in.py

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.clock import Clock

class Opening_Screen(Screen):
    def __init__(self, **kwargs):
        super(Opening_Screen, self).__init__(**kwargs)
        Clock.schedule_once(self.change_screen, 5)

    def change_screen(self, *kwargs):
        self.manager.current = 'Options_Screen'

class Options_Screen(Screen):
    pass

class PatientCareApp(App):
    pass

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

更新1:

当您添加更多代码时,您只需映射新类:

*.py

from kivy.app import App
from kivy.uix.screenmanager import Screen
from kivy.clock import Clock

class Opening_Screen(Screen):
    def __init__(self, **kwargs):
        super(Opening_Screen, self).__init__(**kwargs)
        Clock.schedule_once(self.change_screen, 5)
    def change_screen(self, *kwargs):
        self.manager.current = 'Options_Screen'


class Patient_Care(App):
    pass

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

*.kv

#:import C kivy.utils.get_color_from_hex
#:import RiseInTransition kivy.uix.screenmanager.RiseInTransition

<Opening_Screen>:

ScreenManager:
    transition: RiseInTransition()
    Opening_Screen: 
        name: 'Opening_Screen'
[...]

更新2:

如果您不想在屏幕中实现它,您可以在应用程序中实现。

from kivy.app import App
from kivy.clock import Clock


class Patient_Care(App):
    def on_start(self):
        Clock.schedule_once(self.change_screen, 5)

    def change_screen(self, *kwargs):
        self.root.current = 'Options_Screen'

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

关于Python/Kivy 屏幕转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49101761/

相关文章:

jquery - 带有 jquery 的 Django 模板 : Ajax update on existing page

python - 如何安装设置工具?

python - 需要在 python 中使用字符串索引的帮助

python - 错误: 'value' : keys_to_typing(value)} while sending keys selenium python

java - 对象内存管理 Python 与 Java

python - 从单独文件中的类创建对象

java - c - .class 的等价物

python - 使用 kivy 构建应用程序以与 Django Rest Framework 交互

python - 将 TextInput 绑定(bind)到 .kv 文件中的标签

Kivy:未知类 <ListView> 错误代码