Python kivy随机屏幕显示

Python kivy随机屏幕显示,python,python-3.x,audio,kivy,Python,Python 3.x,Audio,Kivy,我正在尝试制作一个应用程序,一个当按下“下一步”按钮时会显示随机屏幕的游戏,所以我制作了屏幕和标签,显示在每个屏幕上,但我无法让它在按下“下一步”按钮时显示随机屏幕,它只是遵循一种模式,有人能帮我吗?代码如下: #: import FadeTransition kivy.uix.screenmanager.FadeTransition #: import Image kivy.uix.image.Image #: import SoundLoader kivy.core.audio.SoundL

我正在尝试制作一个应用程序,一个当按下“下一步”按钮时会显示随机屏幕的游戏,所以我制作了屏幕和标签,显示在每个屏幕上,但我无法让它在按下“下一步”按钮时显示随机屏幕,它只是遵循一种模式,有人能帮我吗?代码如下:

#: import FadeTransition kivy.uix.screenmanager.FadeTransition
#: import Image kivy.uix.image.Image
#: import SoundLoader kivy.core.audio.SoundLoader


ScreenManagement:

    transition: FadeTransition()

    MainScreen:

    GameScreen:

    GameScreen2:

    GameScreen3:

    GameScreen4:


<Button>:

    font_size: 12
    size_hint: 0.2, 0.1

<MainScreen>:


    name: "main"

    FloatLayout:

    Button:

        text: "START GAME"
        color: 1,0,1,1
        pos_hint: {"x": 0, "y":0}
        on_release: app.root.current = "game"

    Button:

        text: "QUIT"
        color: 1,0,0,1
        pos_hint: {"x": .8, "y": 0}
        on_release: quit()

    Button:
        text: "SOUND"
        color: 0,1,0,1
        pos_hint: {"x":.2 , "y": .4}
        on_press: app.play_sound1()

<GameScreen>:
    name: "game"

    FloatLayout:
        Label:
            text: "Python\nSnowden\nMr.Robot"
            font_size: 40
            color: 0,1,0,1
            pos_hint: {"x":0, "y": 0}


    Button:

        text: "Home"
        on_release: app.root.current = "main"
        color: 1,0,0,1
        pos_hint: {"right":1, "top":1}

    Button:

        text: "Next"
        on_release: app.root.current = "game2"
        color: 0,1,0,1
        pos_hint: {"x":0, "y":0}

<GameScreen2>:
    name: "game2"

    FloatLayout:

        Label:
            text: "Banana\n\nOrange\n\nTea\n\nSleep"
            font_size: 40
            color: 0,1,0,1
            pos_hint: {"x":0, "y": 0}

    Button: 

        text: "Home"
        on_release: app.root.current = "main"
        color: 1,0,0,1
        pos_hint: {"right":1, "top":1}

    Button:

        text: "Next"
        on_release: app.root.current = "game3"
        color: 0,1,0,1
        pos_hint: {"x": 0, "y": 0}

<GameScreen3>:
    name: "game3"

    FloatLayout:

        Label:
            text: "Assembly\n\nRuby\n\nC"
            font_size: 40
            color: 0,1,0,1
            pos_hint: {"x":0, "y":0}

    Button: 

        text: "Home"
        on_release: app.root.current = "main"
        color: 1,0,0,1
        pos_hint: {"right":1, "top":1}

    Button:

        text: "Next"
        on_release: app.root.current = "game4"
        color: 0,1,0,1
        pos_hint: {"x": 0, "y": 0}

<GameScreen4>:
    name: "game4"

    FloatLayout:

        Label:
            text: "Prolog\n\nPygame\n\nC++"
            font_size: 40
            color: 0,1,0,1
            pos_hint: {"x":0, "y":0}

    Button: 

        text: "Home"
        on_release: app.root.current = "main"
        color: 1,0,0,1
        pos_hint: {"right":1, "top":1}
这是我为你做的示例,因为原来的一个比这个大得多,我不知道如何使用循环来生成屏幕,所以我在原来的代码上做了20多个屏幕,如果你能帮我弄清楚,当我点击“开始”按钮时,如何停止菜单歌曲,这样我就可以点击“歌曲”按屏幕1上的按钮播放它的歌曲我会很感激。谢谢你的耐心

触摸“下一步”按钮时显示随机屏幕 使用 屏幕名称

添加的所有小部件的名称列表。名单是 只读

screens\u names是只读的。它是更新的 如果屏幕列表更改或屏幕名称更改

片段 停止/播放音乐 您可能希望使用一个代替按钮来播放音乐。请参考下面的例子

例子 主电压(千伏)
#:kivy 1.11.0
:
音乐屏幕:
名称:“音乐”
:
文本输入:文本输入
id:“音乐”
名称:“音乐”
盒子布局:
大小:root.size
pos:root.pos
方向:“垂直”
文件选择器列表视图:
id:filechooser
根路径:“/home/iam/Music/”
选择时:text\u input.text=自选择和自选择[0]或“”
文本输入:
id:文本输入
尺寸提示:无
身高:50
多行:False
切换按钮:
尺寸提示:1.2
文本:“按文件播放/停止”
on_状态:应用程序on_状态(self.state、text_input.text)
切换按钮:
id:音乐按钮
尺寸提示:1.2
文本:“按标题播放/停止”
on_状态:应用程序on_状态(self.state、text_input.text)
触摸“下一步”按钮时显示随机屏幕 使用 屏幕名称

添加的所有小部件的名称列表。名单是 只读

screens\u names是只读的。它是更新的 如果屏幕列表更改或屏幕名称更改

片段 停止/播放音乐 您可能希望使用一个代替按钮来播放音乐。请参考下面的例子

例子 主电压(千伏)
#:kivy 1.11.0
:
音乐屏幕:
名称:“音乐”
:
文本输入:文本输入
id:“音乐”
名称:“音乐”
盒子布局:
大小:root.size
pos:root.pos
方向:“垂直”
文件选择器列表视图:
id:filechooser
根路径:“/home/iam/Music/”
选择时:text\u input.text=自选择和自选择[0]或“”
文本输入:
id:文本输入
尺寸提示:无
身高:50
多行:False
切换按钮:
尺寸提示:1.2
文本:“按文件播放/停止”
on_状态:应用程序on_状态(self.state、text_input.text)
切换按钮:
id:音乐按钮
尺寸提示:1.2
文本:“按标题播放/停止”
on_状态:应用程序on_状态(self.state、text_input.text)

非常令人困惑的帖子。您的帖子首先询问如何
显示随机屏幕
。然后在最后,您会询问当我点击“开始”按钮时如何停止菜单歌曲。你的问题是什么(请,一次只问一个)。对不起,我不是故意的,所以主要的问题是我试图制作游戏的屏幕,每次我点击“下一步”,它都会显示一个带有标签的随机屏幕,但我只是设法使游戏遵循一种模式,每次点击屏幕1屏幕2屏幕3时都是这样“下一步”,现在我想让它在我点击“下一步”按钮时进入一个随机屏幕。非常令人困惑的帖子。你的帖子开始时询问如何
显示随机屏幕
。最后,你问
当我点击“开始”按钮
时,如何停止菜单歌曲。你的问题是什么(请,一次一个)对不起,我不是故意的,所以主要的问题是我试图制作游戏的屏幕,每次我点击“下一步”,它都会显示一个带有标签的随机屏幕,但我只是设法让游戏遵循一种模式,每次点击“下一步”时,屏幕1屏幕2屏幕3都是一样的,现在我想当我点击“下一步”按钮时,它会进入一个随机屏幕。对于随机屏幕,我想你也可以使用
root.manager.current=random.choice(root.manager.screen\u name)
。有趣的是,让我试试,然后我会发布结果。谢谢。是的,它成功了,我用上面的片段来指导我完成这个过程和它的工作,现在我要完成这个游戏。非常感谢大家。当我完成后,我会确保将它发送给你们所有人:)对于随机屏幕,我想你们也可以使用
root.manager.current=random.choice(root.manager.screen\u names)
。有趣的是,让我试试,然后我会发布结果。谢谢。是的,它成功了,我用上面的片段来指导我完成这个过程和它的工作,现在我要完成这个游戏。非常感谢大家。我写完后一定把它寄给你们所有人:)
from kivy.app import App
from kivy.clock import Clock
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.uix.widget import Widget
from kivy.core.audio import SoundLoader
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition

class MainScreen(Screen):
    pass

class GameScreen(Screen):
    pass

class GameScreen2(Screen):
    pass

class GameScreen3(Screen):
    pass

class GameScreen4(Screen):
    pass

class ScreenManagement(ScreenManager):
    pass

presentation = Builder.load_file("quora.kv")

class MainApp(App):

    def build(self):

        self.load_sounds()

        return presentation

    def load_sounds(self):
        self.sounds = {}
        for i in range(10):
            fname = 'sound' + str(i+1) + '.wav'
            self.sounds[i] = SoundLoader.load(fname)

    def play_sound1(self):
        sound = self.sounds.get(0)
        if sound is not None:
            sound.volume = 0.5
            sound.play()

    def play_sound2(self):
        sound = self.sounds.get(1)
        if sound is not None:
            sound.volume = 0.5
            sound.play()


if __name__ == "__main__":

    MainApp().run()
#:import choice random.choice
...

    Button:

        text: "Next"
        on_release: 
            root.manager.current = choice(root.manager.screen_names[1:])
        color: 0,1,0,1
        pos_hint: {"x":0, "y":0}
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.togglebutton import ToggleButton
from kivy.core.audio import SoundLoader
from kivy.properties import ObjectProperty


class MusicScreen(Screen):
    enter = ObjectProperty(None)
    text_input = ObjectProperty(None)
    stop = ObjectProperty(None)
    musicbutton = ToggleButton()


class ScreenManagement(ScreenManager):
    pass


class MainApp(App):
    sound = ObjectProperty(None, allownone=True)

    def build(self):
        return ScreenManagement()

    def on_state(self, state, filename):
        print("ONSTATE!!!")
        print("\tstate=", state)

        if self.sound is None:
            self.sound = SoundLoader.load(filename)

        # stop the sound if it's currently playing
        if self.sound.status != 'stop':
            self.sound.stop()

        if state == "down":
            self.sound.volume = .5
            self.sound.play()
        else:   # if state == "normal":
            if self.sound:
                self.sound.stop()
                # self.sound.unload()
                self.sound = None


if __name__ == "__main__":
    MainApp().run()
#:kivy 1.11.0

<ScreenManagement>:
    MusicScreen:
        name: 'music'

<MusicScreen>:
    text_input: text_input
    id: "music"
    name: "music"

    BoxLayout:
        size: root.size
        pos: root.pos
        orientation: "vertical"
        FileChooserListView:
            id: filechooser
            rootpath: "/home/iam/Music/"
            on_selection: text_input.text = self.selection and self.selection[0] or ''

        TextInput:
            id: text_input
            size_hint_y: None
            height: 50
            multiline: False

        ToggleButton:
            size_hint: 1, .2
            text: "Play/Stop By File"
            on_state: app.on_state(self.state, text_input.text)

        ToggleButton:
            id: musicbutton
            size_hint: 1, .2
            text: "Play/Stop By Title"
            on_state: app.on_state(self.state, text_input.text)