![](/img/trans.png)
[英]How to reference objects in other screens using kivy screenmanager
[英]Kivy: How do I use layouts within seperate screens while using ScreenManager?
我有一些Kivy代碼,到目前為止,該代碼顯示了一個帶有圖像和標簽的屏幕(BrickBreakerMenuScreen),當按下該按鈕時,將切換為一個中間有圖像的空白屏幕(GameScreen)。 但是,這不是我的代碼的目的。 從Builder中可以看到,第二個屏幕應該將Image對准右上角:
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上的位置。
任何幫助深表感謝。 謝謝!
圖片:
您的代碼運行正常。 該圖像是在右上角。
您的問題是該Image
小部件的大小。 它和窗口的大小一樣大。
要解決此問題,您可以在Image
屬性中添加size_hint: .1, .1
,它會根據需要顯示。
Image:
size_hint: .1, .1
source: 'settings-cog.png'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.