首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >操作2个.kv文件的多个.kv文件

操作2个.kv文件的多个.kv文件
EN

Stack Overflow用户
提问于 2019-03-03 23:11:43
回答 1查看 721关注 0票数 0

大家好,对于那些从我的上一个问题在这里,抱歉我没有完成我的游戏由于这个问题,抓住了我在决赛中,所以这是我有一个带有2个“开始”按钮"START1“和"START2”的菜单,所以我想要的是,每当我按下"START1“它会把我带到指定的.kv文件,当我按下"START2”它进入指定的.kv文件这里是我想要的图片和到目前为止我所做的一个样本

代码语言:javascript
复制
#: import FadeTransition kivy.uix.screenmanager.FadeTransition


ScreenManagement:

    transition: FadeTransition()
    MainScreen:
    GameScreen1:
    GameScreen2:


  Button:

    size_hint: 0.2,0.1
    font_size: 20


  MainScreen:

    name: "Start"

    Button:

        on_release: app.root.current = "game1"
        text: "START"
        color: 1,0,0,1

GameScreen1:

    name: "game1"

    Button:

        pos_hint: {"right":1,"top":0.5}
        color: 1,0,0,1 
        on_release: app.root.current = "game2"
        text: "Next"
        background: 0,1,0,1

    Label: 

        pos_hint: {"x": 0, "y": 0}
        text: "Python\n\n Ruby"
        font_size:40

    Button:

        text: "HOME"
        on_release: app.root.current = "Start"
        pos_hint: {"x": 0.1, "y": 0}


GameScreen2:

    name: "game2"

    Button:

        pos_hint: {"right":1,"top":0.5}
        color: 1,0,0,1 
        on_release: app.root.current = "game1"
        text: "Next"
        background: 0,1,0,1

    Label: 

        pos_hint: {"x": 0, "y": 0}
        text: "Assembly\n\n Prolog"
        font_size:40

    Button:

        text: "HOME"
        on_release: app.root.current = "Start"
        pos_hint: {"x": 0.1, "y": 0}

这就是programmer.kv

代码语言:javascript
复制
#: import FadeTransition kivy.uix.screenmanager.FadeTransition


ScreenManagement:
    transition: FadeTransition()
    MainScreen:
    GameScreen1:
    GameScreen2:


Button:

    size_hint: 0.2,0.1
    font_size: 20


MainScreen:

    name: "Start"

    Button:

        on_release: app.root.current = "game1"
        text: "START"
        color: 1,0,0,1

GameScreen1:

    name: "game1"

    Button:

        pos_hint: {"right":1,"top":0.5}
        color: 1,0,0,1 
        on_release: app.root.current = "game2"
        text: "Next"
        background: 0,1,0,1

    Label: 

        pos_hint: {"x": 0, "y": 0}
        text: "HELLO"
        font_size:40

    Button:

        text: "HOME"
        on_release: app.root.current = "Start"
        pos_hint: {"x": 0.1, "y": 0}


GameScreen2:

    name: "game2"

    Button:

        pos_hint: {"right":1,"top":0.5}
        color: 1,0,0,1 
        on_release: app.root.current = "game1"
        text: "Next"
        background: 0,1,0,1

    Label: 

        pos_hint: {"x": 0, "y": 0}
        text: "WORLD"
        font_size:40

    Button:

        text: "HOME"
        on_release: app.root.current = "Start"
        pos_hint: {"x": 0.1, "y": 0}

这就是social.kv

代码语言:javascript
复制
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.widget import Widget
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.uix.label import Label



class MainScreen(Screen):

    pass

class GameScreen1(Screen):

    pass

class GameScreen2(Screen):

    pass


class ScreenManagement(ScreenManager):

    pass

presentation = Builder.load_file("social.kv")
presentation = Buider.load_file("programmer.kv")

class Myapp(App):

    def builder(self):

        return presentation

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

我试着做两个构建器,但由于两个都有一个“菜单”屏幕覆盖了另一个,我想我可以这样说。所以我想只有一个菜单与2个开始按钮,如上面的图片,将使一个开始激活指定的.kv文件,谁能帮助,现在我没有关于如何做的线索,即时通讯仍在研究。

EN

回答 1

Stack Overflow用户

发布于 2019-03-05 00:54:24

这里有一个如何按照你的要求做的例子。使用2个kv文件。这就是ScreenManager可以为您做的事情。

代码语言:javascript
复制
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.floatlayout import FloatLayout

presentation1 = Builder.load_string('''
Button:
    text: 'This is presentation1'
    on_press: app.switchToRoot2()
''')

presentation2 = Builder.load_string('''
Button:
    text: 'This is presentation2'
    on_press: app.switchToRoot1()
''')

class MultiplKVApp(App):
    def build(self):
        self.root_layout = FloatLayout()
        self.root_layout.add_widget(presentation1)
        return self.root_layout

    def switchToRoot2(self, *args):
        self.root_layout.clear_widgets()
        self.root_layout.add_widget(presentation2)

    def switchToRoot1(self, *args):
        self.root_layout.clear_widgets()
        self.root_layout.add_widget(presentation1)

MultiplKVApp().run()

请注意,这两个kv文件都有MainScreenGameScreen1GameScreen2的实例。因此,kivy将为每个小部件创建两个独立的实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54970248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档