Kivy:如何在使用 ScreenManager 时在单独的屏幕中使用布局?

Kivy: How do I use layouts within seperate screens while using ScreenManager?

我有一些 Kivy 代码,到目前为止它显示一个带有图像和标签的屏幕 (BrickBreakerMenuScreen),当按下它时,它会变成一个空白屏幕 (GameScreen),中间有一个图像。但是,这不是我的代码的目的;正如您在 Builder 中看到的那样,第二个屏幕 应该 对齐右上角的图像:

from kivy.lang import Builder
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.anchorlayout import AnchorLayout
from kivy.uix.image import Image
from kivy import Config
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.widget import Widget
from kivy.animation import Animation
import time

Config.set('graphics', 'multisamples', '0')
Builder.load_string('''
<BrickBreakerMenuScreen>:
    BoxLayout:
        orientation: 'vertical'
        Image:
            source: 'brickbreaker log.png'
        Label:
            font_name: 'vgafix.fon'
            text: 'Tap to start'

<GameScreen>:
    AnchorLayout:
        anchor_x: 'right'
        anchor_y: 'top'
        Image:
            source: 'settings-cog.png'
''')

class BrickBreakerMenuScreen(Screen):
    def __init__(self, **kwargs):
        super(BrickBreakerMenuScreen, self).__init__(**kwargs)

    def on_touch_down(self, touch):
        sm.current = 'game'

class GameScreen(Screen):
    def __init__(self, **kwargs):
        super(GameScreen, self).__init__(**kwargs)

sm = ScreenManager(transition = FadeTransition())
sm.add_widget(BrickBreakerMenuScreen(name='menu'))
sm.add_widget(GameScreen(name='game'))

class BrickBreakerInsanityApp(App):
    def build(self):
        return sm



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

这是屏幕管理器的问题吗?我已经更改了 kv 脚本以尝试查看 AnchorLayout 是否有问题,但是 none 其他布局更改了图像在 GameScreen 上的位置。

非常感谢任何帮助。谢谢!

图片:

您的代码运行正常。图片在右上角。
您的问题是 Image 小部件的大小。它和 window.
的大小一样大 要解决此问题,您可以将 size_hint: .1, .1 添加到 Image 属性,它将按您的需要显示。

    Image:
        size_hint: .1, .1
        source: 'settings-cog.png'