У меня проблема при попытке переключения экранов с кивом - PullRequest
0 голосов
/ 23 марта 2020

уточняется c почти все работает, просто когда я пытаюсь изменить окно с помощью приложения. root .current: * Имя страницы * ничего не происходит, программа не обрабатывает sh или не показывает любые предупреждения, которые действуют, как будто я никогда не писал эту строку вообще.

Я попытался удалить 'if' в строке 41 в файле kivy, но это не имело значения.

python код:

import kivy 
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.widget import Widget
from kivy.properties import ObjectProperty
from kivy.uix.floatlayout import FloatLayout
from kivy.graphics import Color
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

import validity
from validity import Validity


""" class for the login window """

class LoginWindow(Screen, FloatLayout, Widget):
    email = ObjectProperty(None)
    password = ObjectProperty(None)

    def check_input(self):
        valid_email = False
        valid_password = False

        """ uses custom made funcition to check email and password """

        if validity.Validity.checkMail(self.email.text):
            print("Valid Email")
            valid_email = True
        else:
            print("Invalid Email")

        if validity.Validity.checkPassword(self.password.text):
            print("Valid Password")
            valid_password = True
        else:
            print("Invalid Password")

            """ return True or False as str"""
        return str(valid_email and valid_password)


class MainWindow(Screen, FloatLayout):
    pass

class WindowManager(ScreenManager, FloatLayout):
    pass

class LoginInfoPage(Screen, FloatLayout):
    pass

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

class runApp(App):
    def build(self):
        return build

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

файл:

WindowManager:
    LoginWindow:
    MainWindow:
    LoginInfoPage:

<LoginWindow>:
    name: "login_page"

    email: email_id
    password: password_id

    Label: 
        text: "Email: "
        pos_hint: {"x": 0 , "top": 1}
        size_hint: 0.2, 0.1

    TextInput:
        id: email_id
        multiline:False
        pos_hint: {"x": 0.2, "top": 1}
        size_hint: 0.3, 0.1

    Label:
        text: "Password: "
        pos_hint: {"x": 0, "top": 0.9}
        size_hint: 0.2, 0.1


    TextInput:
        id: password_id
        multiline:False
        pos_hint: {"x": 0.2, "top": 0.9}
        size_hint: 0.3, 0.1

    Button:
        text: "Login"
        font_size: 50
        pos_hint: {"x": 0.5, "top": 1}
        size_hint: 0.3, 0.2
        on_release: 
            app.root.current: "main_page" if  root.check_input() == 'True' else "login_page"

<MainWindow>:
    name: "main_page"

    Button:
        text: "Welcome to the main window!" 
        on_release:
            app.root.current: "login_page"

<LoginInfoPage>:
    name: "login_info_page"

спасибо любой, кто пытается помочь

1 Ответ

0 голосов
/ 24 марта 2020

Попробуйте

    on_release: 
        app.root.current = "main_page" if  root.check_input() else "login_page"

Может потребоваться изменить check_input() для возврата

        """ return True or False """
    return valid_email and valid_password
...