用Kivy创建一个屏幕

2024-10-06 12:33:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在没有构建器或按钮的情况下用kivy切换屏幕。我在Kivy文档中找不到任何东西,所以我在这里尝试

我试过不同的方法。首先,要创建屏幕,我使用以下类:

class LoadingScreen(Screen):
    def __init__(self, **kwargs):
        super(LoadingScreen, self).__init__(**kwargs)
        layout = BoxLayout(orientation = 'vertical')
        self.fontup =  'hollywoodcapital.ttf'
        self.fontdw = 'asseenontv.ttf'
        self.add_widget(Label(text = "TEXT 1", font_size='50sp', font_name = self.fontup))
        self.add_widget(Image(source = 'bckgrndlogo.png'))
        layout.add_widget(Label(text = "TEXT 2", font_size='35sp', font_name = self.fontdw))
        self.add_widget(layout)

如您所见,我尝试使用“self.add\u widget”和“layout.add\u widget”在内部添加标签

之后,为了显示屏幕,我尝试了两种不同的方式:

sm = ScreenManager()
sc1 = LoadingScreen(name = 'loadscr')
sm.add_widget(sc1)   
sm.current = 'loadscr'

sm.switch_to(screens[0])

对于这两种方法,我只有一个白色屏幕,它似乎显示屏幕,但不显示其小部件。 有人能帮我吗


Tags: 方法nameselfadd屏幕initttfwidget
2条回答

由于您没有发布可复制的示例,我不得不猜测。 试试这个:

sm = ScreenManager()
setattr(sm, 'current', "loadscr")

自从我的帖子发布一周以来,我一直在做这件事。由于我的代码长度为+500行,我已尝试对其进行修改,我希望它可以运行:

#                IMPORTING MODULES               -
from kivy.app import App
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.gridlayout import GridLayout
from kivy.uix.widget import Widget
from kivy.uix.video import Video
from kivy.uix.image import Image
from kivy.uix.label import Label

import subprocess
import sys
import os
import time
    
#                 KIVY INTERFACE                

class LoadingScreen(Screen):
    def __init__(self, **kwargs):
        super(LoadingScreen, self).__init__(**kwargs)
        self.add_widget(LoadingLayout())

class VideoScreen(Screen):
    def __init__(self, **kwargs):
        super(VideoScreen, self).__init__(**kwargs)
        self.add_widget(VideoWindow())

class LoadingLayout(GridLayout):
    def __init__(self, **kwargs):
        super(LoadingLayout, self).__init__(**kwargs)
        self.fontup =  'hollywoodcapital.ttf'
        self.fontdw = 'asseenontv.ttf'
        self.cols = 1
        self.rows = 3
        self.add_widget(Label(text = "Éppen  kapcsolódunk  Magyarországhoz", font_size='50sp', font_name = self.fontup))
        self.add_widget(Image(source = # a png logo))
        self.add_widget(Label(text = "Legyen türelemmel...", font_size='35sp', font_name = self.fontdw))

class VideoWindow(Video):
    def __init__(self, **kwargs):
        super(VideoWindow, self).__init__(**kwargs)
        self.cols = 1
        self.rows = 1
        self.add_widget(Video(source = #video))
        self.state = "play"
        self.options = {'eos':'loop'}
        self.allow_stretch = True
        self.fullscreen = True

class MainWindow(App):
    def build(self):
        sm = ScreenManager()

        sc1 = Screen(name = 'loadscr')
        sc1.add_widget(LoadingScreen(name = 'loadscr'))
        sc2 = Screen(name = 'videoscr')
        sc2.add_widget(VideoScreen(name = 'videoscr'))
        
        sm.add_widget(sc1)

        return sm


#                - MAIN PROGRAM                - 
window = MainWindow()
Window.fullscreen = 'auto'
window.run()

有了这段代码,我就可以毫无问题地打开第一个屏幕。但现在我正试图切换到第二个屏幕,从现在起没有成功

相关问题 更多 >