случайный экран с киви - PullRequest
       4

случайный экран с киви

0 голосов
/ 23 февраля 2019

Я пытаюсь создать приложение, игру, которая на самом деле будет отображать случайные экраны при нажатии кнопки «СЛЕДУЮЩАЯ», поэтому я сделал экраны и метки для отображения на каждом экране, но не могу заставить его отображатьслучайный экран при нажатии кнопки «СЛЕДУЮЩАЯ», он просто следует шаблону, кто-нибудь поможет мне здесь?вот код:

#: 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}

выше приведен код kv, извините за беспорядок на любителя, когда дело доходит до kivy и вот код стороны Python:

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()

этоПример, который я сделал для вас, потому что оригинал намного больше, чем этот. Я не знаю, как использовать что-то вроде LOOP для генерации экрана, так что я сделал более 20 экранов с исходным кодом, и, если вы могли бы помочь мне понять, какМогу ли я ОСТАНОВИТЬ ПЕСНЮ МЕНЮ, когда я нажму КНОПКУ «СТАРТ», чтобы я мог нажать КНОПКУ «ПЕСНЯ» на ЭКРАНЕ1, чтобы ИГРАТЬ НА ПЕСНЮ, я был бы благодарен.спасибо за терпение

1 Ответ

0 голосов
/ 24 февраля 2019

Отображение случайных экранов при нажатии кнопки «СЛЕДУЮЩАЯ»

Использование Имена экранов

Имена экранов

Список имен всехдобавлены виджеты Screen .Список доступен только для чтения.

screen_names является AliasProperty и доступен только для чтения.Он обновляется при изменении списка экрана или имени экрана.

Фрагменты

#: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}

Остановка / воспроизведение музыки

Возможно, вы захотите использовать ToggleButton вместо кнопки для воспроизведения музыки.Пожалуйста, обратитесь к примеру ниже.

Пример

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()

main.kv

#: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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...