Impossible de changer d'écran dans Kivy

Aug 27 2020

J'ai donc commencé à utiliser Kivy pour créer une application simple. J'ai 2 écrans (principal et registre). Cependant, je ne peux pas passer de l'écran principal à l'enregistrement. Il n'y a pas non plus de code d'erreur, donc je ne suis pas sûr de ce qui ne va pas

Code Python

from kivy.app import App
from kivy.properties import ObjectProperty
from kivy.graphics import Rectangle, Color, Line
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import Screen,ScreenManager


class Main(Screen):
    def btn_tambah_data(self):
        print("Add Data")

    def btn_edit_data(self):
        print("Edit Data")

    def btn_lihat_data(self):
        print("See Data")

class Register(Screen):
    pass


class WindowManager(ScreenManager):
    pass


class Kosless(App):
    def build(self):
        return Main()


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

Code Kv (Désolé si mon code est un peu désordonné)

WindowManager:
    Main:
    Register:

<Main>:
    name: "Main"
    FloatLayout:

        canvas:

            Color:
                rgba: .62,.91,.968,1
            Rectangle:
                pos : self.pos
                size : self.size

            Color:
                rgba:1,.984,.58,1
            Rectangle:
                size: self.width , self.height/25
                pos: self.pos

        Label:
            text:"Kosless"
            font_size:30
            color: 1,.984,.58
            pos_hint:{"y":0.4}
            bold:True
        Button:
            text:"Add Data"
            pos_hint:{"y":0.55,"x":0.25}
            size_hint: 0.5 ,0.1
            background_color:0.1, 0.5, 0.6, 1
            on_press : app.root.current: "Register"    ##I think something went wrong here
        Button:
            text:"Edit Data"
            size_hint: 0.5 ,0.1
            pos_hint:{"y":0.40,"x":0.25}
            background_color:0.1, 0.5, 0.6, 1
            on_press : root.btn_edit_data()
        Button:
            text:"See Data"
            size_hint: 0.5 ,0.1
            pos_hint:{"y":0.25,"x":0.25}
            background_color:0.1, 0.5, 0.6, 1
            on_press : root.btn_lihat_data()

<Register>:
    name: "Register"
    Button:
        text:"Test"

Voici l'écran principal, théoriquement si je clique sur le bouton «Ajouter des données», l'écran d'enregistrement apparaîtra. Cependant, rien ne se passe ... Écran principal

Que devrais-je faire? Avez-vous des suggestions? Merci d'avoir lu mon article, passez une bonne journée!

Réponses

1 JohnAnderson Aug 26 2020 at 22:33

Il y a deux problèmes avec votre code. La première est que pour changer d'écran, vous avez besoin d'un ScreenManager, mais votre app.rootest un Screen( Main). Vous pouvez changer votre build()méthode en quelque chose comme:

class Kosless(App):
    def build(self):
        return Builder.load_file('kv_file_name')

Et l' on_pressattribut du Add Data Buttondevrait être:

    Button:
        text:"Add Data"
        pos_hint:{"y":0.55,"x":0.25}
        size_hint: 0.5 ,0.1
        background_color:0.1, 0.5, 0.6, 1
        on_press : app.root.current="Register" # changed `:` to `=`