Сложность инициализации экрана kivy, TypeError: __init __ () принимает 1 позиционный аргумент, но 2 были заданы - PullRequest
1 голос
/ 31 января 2020

Если кто-нибудь может мне помочь, я был бы признателен. Я пытаюсь инициализировать экран kivy на другом экране kivy, с чем я борюсь, я пробовал разные способы его инициализации и продолжаю получать коды ошибок. Я думаю, что я как-то связан с тем, как настроен мой GUI, но я не уверен. Мой последний код ошибки:

TypeError: __init __ () принимает 1 позиционный аргумент, но было дано 2

Я пробовал разные методы для инициализации ProjectListScreen в ApplyPage. Может кто-нибудь, пожалуйста, помогите точно определить, что я делаю неправильно, я буду признателен. Ниже приведен мой код:

class ProjectListScreen(Screen):
    project_list = ObjectProperty(None)
    def __init__(self, **kwargs):
        super(ProjectListScreen, self).__init__(**kwargs)
        self.thelocalId = None
        self.placementtext = None

projectlistscreen = ProjectListScreen()

class ApplyPage(Screen):

    def __init__(self, **kwargs):
        super(ApplyPage, self).__init__(**kwargs)
        self.projectlistscreen = projectlistscreen
        self.yes = Button(text="Yes", font_size = 20, font_name= "fonts/Qanelas-Heavy.otf", background_color = (0.082, 0.549, 0.984, 1.0), background_normal= '', pos_hint = {"x":0.1,"y":0.05}, size_hint= [0.2, 0.1])
        self.add_widget(self.yes)
        self.no = Button(text="No", font_size= 20, font_name= "fonts/Qanelas-Heavy.otf", background_color = (0.082, 0.549, 0.984, 1.0), background_normal= '', pos_hint = {"x":0.7, "y":0.05}, size_hint= [0.2, 0.1])
        self.add_widget(self.no)

    def on_enter(self, *args):
        print(self.projectlistscreen.placementtext)

class MyApp(App):
    refresh_token_file = "refresh_token.txt"
    members_list = "members_list.txt"




    def build(self):
        self.refresh_token_file = self.user_data_dir + self.refresh_token_file
        self.thefirebase = MyFireBase()
        self.projectlistscreen = ProjectListScreen()
        self.apply = ApplyPage(self.projectlistscreen)



        return sm



sm = Builder.load_file("kivy.kv")

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

Ниже приведен мой полный возврат

Отслеживание (последний вызов был последним): Файл "/Users/temitayoadefemi/PycharmProjects/test5/mainfile.py", строка 871, в MyApp (). Run () Файл "/Users/temitayoadefemi/PycharmProjects/test5/venv/lib/python3.7/site-packages/kivy/app.py", строка 800, в работе root = self.build () Файл "/Users/temitayoadefemi/PycharmProjects/test5/mainfile.py", строка 860, в сборке self.apply = ApplyPage (self.projectlistscreen) Ошибка типа: init () принимает 1 позиционный аргумент, но 2 были заданы

1 Ответ

0 голосов
/ 31 января 2020

Существует разница между аргументами *args и ключевыми словами **kwargs. Когда вы вызываете self.apply = ApplyPage(self.projectlistscreen), вы передаете 2 аргумента функции __init__: экземпляр класса self и self.projectlistscreen, но функция ожидает только экземпляр класса self + возможные аргументы ключевого слова.

Вот пример для лучшего понимания:

def myfun1(**kwargs):
    print(kwargs)

myfun1(3)
# TypeError: myfun() takes 0 positional arguments but 1 was given

def myfun2(**kwargs):
    print(kwargs)

myfun2(foobar=3)
# {'foobar': 3}

def myfun3(*args):
    print(args)

myfun3(3)
# (3,)

def myfun4(*args):
    print(args)

myfun4(foobar=3)
#TypeError: myfun() got an unexpected keyword argument 'foobar'

Итак, у вас есть 2 варианта для вашей проблемы:

def __init__(self, *args):

Или

self.apply = ApplyPage(foobar=self.projectlistscreen)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...