如何在Kivy中设置屏幕背景图像

18

我知道如何制作一个有颜色的背景,但是我似乎找不到任何有用的设置图像作为背景的内容,并且非常感谢您对我的代码提供任何帮助。

这是我的.py文件:

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
#from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.core.window import Window
from kivy.core.image import Image
#from kivy.graphics import BorderImage
from kivy.graphics import Color, Rectangle
#from kivy.uix.image import AsyncImage


class StartScreen(Screen):
    pass

class GameScreen(Screen):
    pass

class RootScreen(ScreenManager):
    pass


class MainApp(App):
    def build(self):
        return RootScreen()

if __name__ == "__main__":
    MainApp().run()

以及 .kv 文件:

#:import FadeTransition kivy.uix.screenmanager.FadeTransition

<RootScreen>:
    transition: FadeTransition() 
    StartScreen:
    GameScreen:

<StartScreen>:
    name: "start"
    canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
        Image:
            source: "lights.png"
    FloatLayout:
        Image:     # This part doesn't seem to work
            source: "lights.png"
            allow_stretch: True
            keep_ratio: False
            size_hint: 1, 1
        Button:
            text: "Play!"
            size_hint: 0.4, 0.3
            pos_hint: {'center_x':.5, 'center_y':.5}
            font_size: 70
            on_release: root.manager.current = "game"
<GameScreen>:
    name: "game"
    FloatLayout:
        Button:
            text: "Nazaj!"
            font_size: 70
            on_release: root.manager.current  = "start"
2个回答

21
canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
        Image:
            source: "lights.png"

图像是一个小部件,不能将其放置在画布上。

你可以做的是为矩形设置来源:


canvas.before:
        Rectangle:
            pos: self.pos
            size: self.size
            source: 'lights.png'

...或者将您的图片放在容器布局中,以便将其放置在其他小部件后面。


谢谢您的回答,但不幸的是它似乎没有任何作用。我尝试直接在屏幕上添加图像以及在浮动布局中作为小部件,但它们都没有任何变化,它不显示任何图像,我不明白为什么。 - Larisa
抱歉,它可以工作了,谢谢!我只是没有将图像保存在相同的目录中。 - Larisa
谢谢@inclement。这对我的应用程序有所帮助。 - Pyzard

0
现在有一种简单的方法来做到这一点,这里只需添加FitImage即可。
MDScreen:
    md_bg_color: 239/255, 239/255, 239/255, 1
    name:"entrance"
    FitImage:
        source:"images/yourimagepath.jpg"
    MDBoxLayout:

目前这是唯一对我有效的答案。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接