Ошибка аргумента Python Kivy Builder __no_builder - PullRequest
0 голосов
/ 27 апреля 2019

Я пишу простое приложение с экраном входа в систему, используя kivy в python. Я решил разделить свой код kivy на более мелкие компоненты, но когда я помещаю один из них в конструктор, он выдает мне эту ошибку:

 Traceback (most recent call last):
   File "main.py", line 48, in <module>
     screen_manager.add_widget(LoginScreen(name=AppState.LOGIN_SCREEN))
   File "C:\Users\Matis\Desktop\python\yolobot\app\login.py", line 41, in __init__
     super(Screen, self).__init__(**kwargs)
   File "C:\Program Files\Python36\lib\site-packages\kivy\uix\relativelayout.py", line 265, in __init__
     super(RelativeLayout, self).__init__(**kw)
   File "C:\Program Files\Python36\lib\site-packages\kivy\uix\floatlayout.py", line 65, in __init__
     super(FloatLayout, self).__init__(**kwargs)
   File "C:\Program Files\Python36\lib\site-packages\kivy\uix\layout.py", line 76, in __init__
     super(Layout, self).__init__(**kwargs)
   File "C:\Program Files\Python36\lib\site-packages\kivy\uix\widget.py", line 348, in __init__
     Builder.apply(self, ignored_consts=self._kwargs_applied_init)
   File "C:\Program Files\Python36\lib\site-packages\kivy\lang\builder.py", line 469, in apply
     self._apply_rule(widget, rule, rule, ignored_consts=ignored_consts)
   File "C:\Program Files\Python36\lib\site-packages\kivy\lang\builder.py", line 585, in _apply_rule
     self._apply_rule(child, crule, rootrule)
   File "C:\Program Files\Python36\lib\site-packages\kivy\lang\builder.py", line 582, in _apply_rule
     child = cls(__no_builder=True)
 TypeError: __init__() got an unexpected keyword argument '__no_builder'

Я проверил эту ошибку в Интернете и нашел статьи, не связанные с моей проблемой, так что я думаю, что это довольно редко. Когда я помещаю код kivy класса LoginForm вместо ссылки на класс LoginForm в login.py, я не получаю никаких ошибок. Вот код main.py:

'' '

from kivy.config import Config
Config.set('graphics', 'resizable', False)

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import ScreenManager, NoTransition
from kivy.uix.checkbox import CheckBox
from kivy.core.window import Window

from core.yolobot import Yolobot

from app.login import LoginScreen
from app.keyactivation import KeyActivationScreen
from app.yolobotui import YolobotScreen
from app.reactivation import ReactivationScreen
from app.appstate import AppState

screen_manager = ScreenManager(transition=NoTransition())
screen_manager.add_widget(LoginScreen(name=AppState.LOGIN_SCREEN))
screen_manager.add_widget(KeyActivationScreen(name=AppState.KEY_ACTIVATION_SCREEN))
screen_manager.add_widget(YolobotScreen(name=AppState.YOLOBOT_SCREEN))
screen_manager.add_widget(ReactivationScreen(name=AppState.REACTIVATION_SCREEN))

class YolobotApp(App):
    title = "Yolobot"
    def build(self):
        Window.size = WINDOW_SIZE
        Window.clearcolor = BACKGROUND_COLOR
        return screen_manager


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

'' '

login.py:

'' '

from kivy.uix.screenmanager import Screen
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.textinput import TextInput
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.lang import Builder

from app.components.loginform import LoginForm

Builder.load_string("""
<LoginScreen>:
    BoxLayout:
        orientation: 'vertical'
        padding: [10,50,10,50]
        spacing: 50

        Label:
            text: 'Yolobot 1.0'
            font_size: 64

        LoginForm:
            label_text: 'Username'
            text_input_id: username
            hide_content: False

        LoginForm:
            label_text: 'Password'
            text_input_id: password
            hide_content: True

         Button:
            text: 'Sign-in'
            font_size: 20
""")

class LoginScreen(Screen):
    def __init__(self, **kwargs):
        super(Screen, self).__init__(**kwargs)

    def login(login, password):
        pass

'' '

loginform.py:

'' '

from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.lang import Builder

Builder.load_string("""
<LoginForm>:
    orientation: 'vertical'

    Label:
        text: root.label_text
        font_size: 18
        halign: 'left'
        text_size: root.parent.width-20, 20

    TextInput:
        id: text_input_id
        multiline: False
        password: root.hide_content
        font_size: root.text_input_font_size
""")

class LoginForm(BoxLayout):
    def __init__(label_text='', text_input_id=None, hide_content=False):
        super(BoxLayout, self).__init__()
        self.label_text = label_text
        self.text_input_id = text_input_id
        self.hide_content = hide_content
        self.text_input_font_size = 15

'' '

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...