Kivy使用来自KV文件的ScreenManager [英] Kivy Using a ScreenManager from kv file

查看:262
本文介绍了Kivy使用来自KV文件的ScreenManager的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在写一个奇异的程序/游戏.我以前做过一个,但总共只有1个屏幕.我已经开始开发具有实现Screen Manager想法的新程序.我设法在python文件中构建了Screen Manager,但是它不适合我的长期使用,所以我想尝试使用.kv file中的Screen Manager.

I'm writing a kivy program/game. I've made one before, but was only 1 screen in total. I've started developing a new program with ideas of implementing a Screen Manager. I managed to build the Screen Manager inside of the python file, but it wasn't suitable for my long term usage, and I wanted to try my hand at a Screen Manager from the .kv file.

任何指导将不胜感激,不确定我错过了什么.我看着这个问题v( Kivy-屏幕管理器-访问其他类中的属性),拼凑出我认为正确的内容,但仍然无法加载屏幕-我觉得这是一个简单的答案,而且我很盲目...

Any guidance will be greatly appreciated, not sure what I missed. I looked at this questionv(Kivy - Screen Manager - Accessing attribute in other class), and pieced together what I thought was right, but still can't get a screen to load - I feel this is a simple answer and I'm being blind...

main.py;

from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition


class MenuScreen(Screen):
    pass

class NewGameScreen(Screen):
    pass

class LoadGameScreen(Screen):
    pass

class ASCIILifeApp(App):
    pass

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

ASCIILife.kv;

ASCIILife.kv;

#: kivy 1.9
#: import ScreenManager kivy.uix.screenmanager.ScreenManager
#: import Screen kivy.uix.screenmanager.ScreenManager
#: import NewGameScreen screen
#: import LoadGameScreen screen

ScreenManager:
    id: screen_manager
    #transition: FadeTransition()
    MenuScreen:
        id: menu_screen
        name: 'MenuScreen'
        manager: 'screen_manager'
    NewGameScreen:
        id: newgame_screen
        name: 'NewGameScreen'
        manager: 'screen_manager'
    LoadGameScreen: 
        id: loadgame_screen
        name: 'LoadGameScreen'
        manager: 'screen_manager'

<MenuScreen>:
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'ASCII Life'
            font_size: 50
        Button:
            text: 'New Game'
            font_size: 30
            on_release: app.root.current = 'newgame'
        Button:
            text: 'Load Game'
            font_size: 30
            on_release: app.root.current = 'loadgame'
        Button:
            text: 'Settings'
            font_size: 30
            on_release: app.root.current = 'something'
<NewGameScreen>:
    BoxLayout:
        orientation: 'vertical'
        BoxLayout:
            orientation: 'vertical'
            Label:
                text: 'Game Length in Days'
                font_size: 30
            BoxLayout:
                orientation: 'horizontal'
                ToggleButton:
                    text: '100'
                    state: 'down'
                    group: 'newgame_days'
                    font_size: 30
                ToggleButton:
                    text: '200'
                    group: 'newgame_days'
                    font_size: 30
            BoxLayout:
                orientation: 'horizontal'
                ToggleButton:
                    text: '365'
                    group: 'newgame_days'
                    font_size: 30
                ToggleButton:
                    text: '3650'
                    group: 'newgame_days'
                    font_size: 30
            ToggleButton:
                text: 'Unlimited'
                group: 'newgame_days'
                font_size: 30
        BoxLayout:
            orientation: 'vertical'
            size_hint: (1, .5)
            Label:
                text: 'Difficulty (Score Multiplier)'
                font_size: 30
            BoxLayout:
                orientation: 'horizontal'
                ToggleButton:
                    text: 'Easy (x1)'
                    state: 'down'
                    group: 'newgame_difficulty'
                    font_size: 30
                ToggleButton:
                    text: 'Medium (x2.5)'
                    group: 'newgame_difficulty'
                    font_size: 30
                ToggleButton:
                    text: 'Hard (x5)'
                    group: 'newgame_difficulty'
                    font_size: 30
<LoadGameScreen>:
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'load a game'
            font_size: 30
        Widget:
            canvas:
                Ellipse:
                    pos: self.pos
                    size: self.size
        BoxLayout:
            Button:
                text: 'Menu'
                font_size: 30
                on_release: app.root.current = 'menu'
            Button:
                text: 'text'
                font_size: 30

截断的kv文件

推荐答案

答案是使用构建器构建kv文件.知道这很简单.文件在下面;

The answer was using a builder to build the kv file. Knew it was something simple. File below;

main.py

#!/usr/bin/kivy
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.properties import ObjectProperty


class MenuScreen(Screen):
    pass

class NewGameScreen(Screen):
    pass

class LoadGameScreen(Screen):
    pass

class ScreenManager(ScreenManager):
    pass

buildKV = Builder.load_file("ASCIILife.kv")

class ASCIILifeApp(App):
    def build(self):
        return buildKV

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

这篇关于Kivy使用来自KV文件的ScreenManager的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆