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

时间:2019-04-05 13:36:02

标签: python python-3.x kivy kivy-language

我有一些Kivy代码,到目前为止,该代码显示了一个带有图像和标签的屏幕(BrickBreakerMenuScreen),当按下该按钮时,将切换为一个以图像为中心的空白屏幕(GameScreen)。但是,这不是我的代码的目的。如您从生成器中看到的,第二个屏幕应该将图像右上角对齐:

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()

是由于ScreenManager造成的问题吗?我已经更改了kv脚本以尝试查看AnchorLayout是否存在问题,但其他布局均未更改图像在GameScreen上的位置。

非常感谢您的帮助。谢谢!

图片:

cog from GameScreen

logo from BrickBreakerMenuScreen

1 个答案:

答案 0 :(得分:1)

您的代码运行正常。图像位于右上角。
您的问题是该Image小部件的大小。它和窗口的大小一样大。
要解决此问题,您可以将size_hint: .1, .1添加到Image属性中,并根据需要显示。

    Image:
        size_hint: .1, .1
        source: 'settings-cog.png'
相关问题