用 Kivy 创建一个屏幕

时间:2021-03-22 18:12:59

标签: python python-3.x kivy

我正在尝试在没有构建器或按钮的情况下使用 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_widget”和“layout.add_widget”将标签放入其中。

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

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

sm.switch_to(screens[0])

对于这两种方法,我只有一个白屏,它似乎显示了屏幕而不是它的小部件。 有人可以帮我吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

自从我的帖子发布一周以来,我一直在努力解决这个问题。由于我的代码有 + 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()

使用此代码,我的第一个屏幕没有问题。但现在我正在尝试切换到第二个屏幕,从现在开始没有成功。

相关问题