Python kivy: Как я могу исправить "TypeError: object .__ init __ () не принимает параметров"? - PullRequest
0 голосов
/ 01 июня 2019

У меня проблема с моим кодом здесь.Я хочу реализовать строку с данными на языке kv прямо в моем файле python, чтобы добавить дизайн в «MDTextFieldClear».Я не уверен, должна ли ошибка быть в строке kv, но после небольшого тестирования классов и отступа строки kv я думаю, что это может быть причиной.Вот фрагмент кода:

from kivymd.theming import ThemeManager
from kivymd.textfields import MDTextFieldClear    # KivyMD imports

class LayoutPy(FloatLayout):    # Widget class
    def __init__(self, **kwargs):
        super(LayoutPy, self).__init__(**kwargs)
        self.get_voc = MDTextFieldClear(helper_text="Please enter the translation", helper_text_mode="on_focus", max_text_length=12, multiline=False, color_mode="accent")
        self.add_widget(self.get_voc)

        # ... (few more widgets) ...#

Builder.load_string("""
#:import MDTextField kivymd.textfields.MDTextField
#:import MDTextFieldRound kivymd.textfields.MDTextFieldRound
#:import MDTextFieldClear kivymd.textfields.MDTextFieldClear
#:import MDTextFieldRect kivymd.textfields.MDTextFieldRect

<LayoutPy>:
    orientation: 'vertical'
    FloatLayout:
        MDTextFieldClear:
            hint_text: ""
            helper_text: "Enter translation"
            helper_text_mode: "on_focus"
            max_text_length: 10
""")

class KivyGUI(App):          # Main class for build
    theme_cls = ThemeManager()
    theme_cls.primary_palette = ("Blue")
    title = ('Lingu Trainer')
    main_widget = None

    def build(self):
        c = LayoutPy()
        d = Factory.TextFields()
        return c


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

Ошибка выглядит следующим образом:

Traceback (последний вызов был последним): файл "PATH_TO_MY_PYTHON_FILE", строка 106, в KivyGUI ().run ()

Файл "C: \ Users \ имя пользователя \ Anaconda3 \ lib \ site-packages \ kivy \ app.py", строка 800, в run root = self.build ()

Файл "PATH_TO_MY_PYTHON_FILE", строка 100, в сборке c = LayoutPy ()

Файл "PATH_TO_MY_PYTHON_FILE", строка 54, в init self.get_voc = MDTextFieldClear (helper_text)перевод ", helper_text_mode =" on_focus ", max_text_length = 12, многострочный = False, color_mode =" accent ")

Файл" C: \ Users \ имя пользователя \ Anaconda3 \ lib \ site-packages \ kivy \ uix\ boxlayout.py ", строка 131, в init super (BoxLayout, self). init (** kwargs)

Файл" C: \ Users \ username\ Anaconda3 \ lib \ site-packages \ kivy \ uix \ layout.py ", строка 76, в init super (Layout, self). init (** kwargs)

Файл "C: \ Users \ имя пользователя \ Anaconda3 \ lib \ site-packages \"kivy \ uix \ widget.py ", строка 340, в init super (Widget, self). init (** kwargs)

File" kivy_event.pyx", строка 243, в файле kivy._event.EventDispatcher. init TypeError: object. init () не принимает параметров

1 Ответ

1 голос
/ 01 июня 2019

Проблема 1 - Ошибка типа

 TypeError: object.__init__() takes exactly one argument (the instance to initialize)

Основная причина

Ошибка произошла из-за атрибутов color_mode и / или multiline.

Проблема 2- Несоответствие наследования

В вашем файле kv атрибут orientation объявлен для правила класса <LayoutPy>:.Этот атрибут применим к BoxLayout.Но в вашем скрипте Python class LayoutPy() имеет наследование FloatLayout.

Решение

В следующем примере BoxLayout используется в качестве корня.

main.py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout

from kivymd.theming import ThemeManager
from kivymd.textfields import MDTextFieldClear


class LayoutPy(BoxLayout):

    def __init__(self, **kwargs):
        super(LayoutPy, self).__init__(**kwargs)

        self.get_voc = MDTextFieldClear(helper_text="Please enter the translation",
                                        helper_text_mode="on_focus", max_text_length=12,
                                        hint_text="Created in py"
                                        )
        self.add_widget(self.get_voc)


Builder.load_string("""
#:import MDTextFieldClear kivymd.textfields.MDTextFieldClear

<LayoutPy>:
    orientation: 'vertical'

    FloatLayout:
        MDTextFieldClear:
            hint_text: "kv: Created"
            helper_text: "Enter translation"
            helper_text_mode: "on_focus"
            max_text_length: 10

""")


class KivyGUI(App):
    theme_cls = ThemeManager()
    theme_cls.primary_palette = "Blue"
    title = 'Lingu Trainer'

    def build(self):
        return LayoutPy()


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

Выход

Result

...