Kivy:在使用ScreenManager时,如何在不同的屏幕中使用布局?

2024-10-01 04:53:25 发布

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

我有一些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()

这是因为屏幕管理器的问题吗?我已经修改了kv脚本,试图看看这是否与AnchorLayout有关,但是其他布局都没有改变图像在游戏屏幕上的位置

非常感谢您的帮助。谢谢

图像:

cog from GameScreen

logo from BrickBreakerMenuScreen


Tags: namefrom图像importself屏幕initdef
1条回答
网友
1楼 · 发布于 2024-10-01 04:53:25

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

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

相关问题 更多 >