Как l oop в Kivy, используя язык kv? - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь создать приложение из игры, в которую играю со своими друзьями.

У меня есть этот код, и я хочу l oop список "jugadores" в FourWindow.

import kivy
kivy.require('1.9.0')

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang.builder import Builder
from kivy.core.window import Window

Window.size = (300, 1280)

Jugadores = []
CantidadDeCartas = 0
Objetivo = 0
Manos = 0

class MainWindow(Screen):

    cartas = ObjectProperty(None)
    objetivo = ObjectProperty(None)

    def btn(self):
        CantidadDeCartas = int(self.cartas.text)
        Objetivo = int(self.objetivo.text)
        self.cartas.text = ""
        self.objetivo.text = ""

class SecondWindow(Screen):

    cartas = ObjectProperty(None)
    objetivo = ObjectProperty(None)

class ThirdWindow(Screen):

    def btn3(self):
        Nombre = self.njugador.text
        Jugadores.append(Nombre)
        self.njugador.text = ""
        self.jugador.text = str(Jugadores)
        print(Jugadores)

    def btn4(self):
        self.njugador.text = ""
        Jugadores.clear()
        self.jugador.text = ""

    def btn5(self):
        Jugadores.reverse()
        if len(Jugadores) != 0:
            largo = Jugadores.count(self)
            Jugadores.pop(largo)
            Jugadores.reverse()
            print(Jugadores)
            self.jugador.text = str(Jugadores)
        else:
            self.jugador.text = ""
class FourWindow(Screen):
    pass
class WindowManager(ScreenManager):
    pass

kv = Builder.load_file("tim4.kv")

class tim4App(App):
    def build(self):
        return kv

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

KIVY

WindowManager:
    MainWindow:
    SecondWindow:
    ThirdWindow:
    FourWindow:

<MainWindow>:

    name: "main"
    cartas : cartas
    objetivo : objetivo

    GridLayout:
        cols:1

        GridLayout:
            cols: 2
            Label:
                text:"Cartas: "
            TextInput:
                id: cartas
                multiline: False
                input_type: "number"
                input_filter: "int"
            Label:
                text:"Objetivo: "
            TextInput:
                id: objetivo
                multiline: False
                input_type: "number"
                input_filter: "int"
        Button:
            text: "Siguiente>>"
            on_release:
                app.root.current= "second"
                root.manager.screens[1].ids.carta.text = "Se juega con " + root.ids.cartas.text + " cartas"
                root.manager.screens[1].ids.objetivo.text = "Se juega a " + root.ids.objetivo.text
                root.manager.screens[3].ids.iduno.text = "Se juega con " + root.ids.cartas.text + " cartas"
                root.manager.screens[3].ids.iddos.text = "Se juega a " + root.ids.objetivo.text
                root.btn()
                root.manager.transition.direction="left"
<SecondWindow>:
    name: "second"
    carta: carta
    objetivo: objetivo


    GridLayout:
        cols:1
        size: root.width, root.height
        pos: 0, 0

        Label:
            id: carta
            text: ""
        Label:
            id: objetivo
            text: ""

        GridLayout:
            cols:2

            Button:
                text: "Ir Atrás"
                on_release:
                    app.root.current= "main"
                    root.manager.transition.direction="right"

            Button:
                text: "Elegir Jugadores"
                on_release:
                    app.root.current= "third"
                    root.manager.transition.direction="left"

<ThirdWindow>
    name: "third"
    njugador: njugador
    jugador: jugador
    empezar: empezar

    GridLayout:
        cols: 2
        orientation: "horizontal"


        GridLayout:
            cols:1
            TextInput:
                id: njugador
                text: "quien juega"
                multiline: False
            GridLayout:
                cols:3

                Button:
                    text: "Agregar Jugador"
                    on_press: root.btn3()
                Button:
                    text:"Borrar Último"
                    on_press: root.btn5()
                Button:
                    text:"Limpiar todo"
                    on_press: root.btn4()

            GridLayout:
                cols:1
                orientation: "vertical"

                Label:
                    id : jugador
                    text: ""
                Button:
                    id: empezar
                    text:"Empezar Juego"
                    on_release:
                        app.root.current= "four"
                        root.manager.transition.direction="left"

<FourWindow>
    name: "four"
    iduno: iduno
    iddos: iddos
    idtres: idtres

    GridLayout:
        orientation:"horizontal"
        rows: 3

        Label:
            id: iduno
            text:""
        Label:
            id: iddos
            text:""
        Label:
            id: idtres
            text:"manos"

В FourWindow я хочу l oop список "Jugadores" для создания меток. Theres в любом случае делать это через kv lenguage? Или как это сделать на python файле?

1 Ответ

0 голосов
/ 05 февраля 2020

Вы можете сделать это с помощью метода on_enter() в вашем классе FourWindow, или вы можете сделать это в kv, определив метод on_enter в kv. Для этого измените правило FourWindow в kv:

#: import Label kivy.uix.label.Label
<FourWindow>
    name: "four"
    iduno: iduno
    iddos: iddos
    idtres: idtres

    on_pre_enter: for p in self.players: l=Label(text=p); grid.add_widget(l);

    GridLayout:
        id: grid   # needed for the above code
        rows: 3

        Label:
            id: iduno
            text:""
        Label:
            id: iddos
            text:""
        Label:
            id: idtres
            text:"manos"

и измените определение класса FourWindow:

class FourWindow(Screen):
    players = ObjectProperty(Jugadores)

Объект players просто для доступа к списку Jugadores.

...