gpt4 book ai didi

Python/Kivy 屏幕转换

转载 作者:行者123 更新时间:2023-12-01 02:05:40 25 4
gpt4 key购买 nike

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com