没有名字的屏幕

时间:2017-09-13 12:19:58

标签: python kivy

我的所有程序都达到了一定程度,而且我的路被它阻挡了。

  1. 我的程序在主应用程序中加载了一些启动画面。
  2. 根据用户输入,程序加载完全不同的子应用程序。
  3. 尝试更改已加载的子应用程序中的屏幕时出现问题
  4. 以下是存在问题的代码:

    .py文件:

    import kivy
    kivy.require('1.10.0')
    
    from kivy.app import App
    from kivy.lang import Builder
    from kivy.uix.screenmanager import Screen, ScreenManager, FadeTransition
    from kivy.uix.button import Button
    from kivy.uix.label import Label
    
    chClass = ""
    
    class ScreenManage(ScreenManager):
        pass
    
    class Home(ScreenManager):
        pass
    
    class TitleScreen(Screen):
        pass
    
    class GameScreen(Screen):
        pass
    
    class ClassScreen(Screen):
        pass
    
    class Warrior1(Screen):
    
        def GetChClass(self, ch):
            return ch
    
        def build(self):
            ExecuteW().run()
    
    class Acrobat1(Screen):
    
        def GetChClass(self, ch):
            return ch
    
    class Spell1(Screen):
    
        def GetChClass(self, ch):
            return ch
    
    class HomeScreen(Screen):
        pass
    
    class WarriorStats(Screen):
        pass
    
    class AcrobatStats(Screen):
        pass
    
    class SpellCasterStats(Screen):
        pass
    
    class ExecuteW(App):
        def build(self):
            return Home()
    
    class RevengeApp(App):
        def build(self):
            return ScreenManage()
    
    if __name__ == '__main__':
        print chClass
        RevengeApp().run()
    

    revenge.kv:

    #: import sm kivy.uix.screenmanager
    #: import Factory kivy.factory.Factory
    #: import builder kivy.lang.Builder
    
    <ScreenManage>
        transition: sm.FadeTransition()
        TitleScreen:
        ClassScreen:
        GameScreen:
        Warrior1:
        Acrobat1:
        Spell1:
        WarriorStats:
    
    <TitleScreen>
        on_touch_down: app.root.current = 'Game'
        canvas:
            Rectangle:
                size: self.size
                pos: self.pos
                source: 'KnightArmor.jpg'
        BoxLayout:
            orientation: 'vertical'
            Label:
                font_size: '30sp'
                color: 1,0,0,1
                text: "Warrior's Revenge"
            Label:
                color: 1,0,0,1
                text: "Click to Continue:"
    
    <GameScreen>
        name: 'Game'
        canvas:
            Rectangle:
                size: self.size
                pos: self.pos
                source: 'KnightArmor.jpg'
        BoxLayout:
            Button:
                size_hint: .5,.1
                text: "New Game"
                on_release: app.root.current = 'Class'
            Button:
                size_hint: .5,.1
                text: "Load Game"
    
    <ClassScreen>
        name: 'Class'
        BoxLayout:
            orientation: 'vertical'
            Label:
                text: "Choose Your Path"
            Button:
                text: "Warrior"
                on_release: app.root.current = "Warrior1"
            Button:
                text: "Acrobat"
                on_release: app.root.current = "Acrobat1"
            Button:
                text: "Spell Caster"
                on_release: app.root.current = "Spell1"
    
    <Warrior1>
        name: "Warrior1"
        canvas:
            Rectangle:
                size: self.size
                pos: self.pos
                source: "Warrior.jpg"
        BoxLayout:
            orientation: 'vertical'
            Label:
                font_size: "20sp"
                text: "Warrior's are physically strong"
                color: 0,.5,1,1
            Label:
                font_size: "20sp"
                text: "experts in hand to hand combat,"
                color: 0,.5,1,1
            Label:
                font_size: "20sp"
                text: "and knowledgeable in the ways of"
                color: 0,.5,1,1
            Label:
                font_size: "20sp"
                text: "arms and armor"
                color: 0,.5,1,1
            BoxLayout:
                orientation: 'horizontal'
                Button:
                    text: "Cancel"
                    on_release: app.root.current = "Class"
                Button:
                    name: "warrior_confirm"
                    text: "Confirm"
                    on_release: chClass = root.GetChClass('Warrior')
                    on_release: root.build()
    

    executew.kv:

    #: import sm kivy.uix.screenmanager
    
    <Home>:
        transition: sm.FadeTransition()
        HomeScreen:
        WarriorStats:
    
    <HomeScreen>
        name: 'Home'
        AnchorLayout:
            Button:
                text: "Stats"
                on_release: app.root.current = 'WStats'
    
    <WarriorStats>
        name: 'WStats'
        canvas:
            Rectangle:
                size: self.size
                pos: self.pos
                source: "Warrior.jpg"
    

    问题: 在executew中单击主屏幕上的统计按钮时,WarriorStats屏幕名为&#39; WStats&#39;应该加载,但我收到错误&#34;没有名称的屏幕&#39; WStats&#39;&#34;

1 个答案:

答案 0 :(得分:0)

我自己想出的答案

class HomeScreen(Screen):
    def switch(self):
        self.manager.current = "WStats"

class HomeScreen(Screen): def switch(self): self.manager.current = "WStats"

在executew:

<HomeScreen>
    Button:
        text: "Stats"
        on_release: root.switch()