Python kivy builder参数'\u no\u builder'

2024-04-20 13:02:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python中的kivy编写一个带有登录屏幕的简单应用程序。我决定将我的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'

我在网上查过这个错误,发现了与我的问题无关的文章,所以我想这是很少见的。当我把LoginForm类的kivy代码而不是LoginForm类引用放在登录.py我没有任何错误。 这是密码 主.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()

''

你知道吗登录.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

''

你知道吗登录表单.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

''


Tags: textinfrompyimportselfappinput