python - 难以初始化 kivy 屏幕,TypeError : __init__() takes 1 positional argument but 2 were given

标签 python kivy

如果有人能帮助我,我将不胜感激。我正在尝试将 kivy 屏幕初始化为另一个 kivy 屏幕,这是我遇到的问题,我尝试了不同的方法来初始化它,但我不断收到错误代码。我认为我的 GUI 设置方式与我有关,但我不确定。我最新的错误代码是这样的:

TypeError: __init__() takes 1 positional argument but 2 were given

我一直在尝试不同的方法来初始化ApplyPage中的ProjectListScreen。有人可以帮助我准确地确定我做错了什么吗,我将不胜感激。下面是我的代码:

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()

下面是我的完整回溯

Traceback (most recent call last):
File "/Users/temitayoadefemi/PycharmProjects/test5/mainfile.py", line 871, in
MyApp().run()
File "/Users/temitayoadefemi/PycharmProjects/test5/venv/lib/python3.7/site-packages/kivy/app.py", line 800, in run
root = self.build()
File "/Users/temitayoadefemi/PycharmProjects/test5/mainfile.py", line 860, in build
self.apply = ApplyPage(self.projectlistscreen)
TypeError: init() takes 1 positional argument but 2 were given

最佳答案

参数*args和关键字参数**kwargs之间存在差异。 当您调用 self.apply = ApplyPage(self.projectlistscreen) 时,您向 __init__ 函数提供 2 个参数:类实例 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'

所以你有两个选择来解决你的问题:

def __init__(self, *args):

或者

self.apply = ApplyPage(foobar=self.projectlistscreen)

关于python - 难以初始化 kivy 屏幕,TypeError : __init__() takes 1 positional argument but 2 were given,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60001968/

相关文章:

python子进程: read from pipe without closing it

python - 搜索 CSV 文件 (Python)

android - 如何在 Kivy 中重置小部件

android - 在 Google play 上上传应用程序时遇到问题 Made via Buildozer

python - Kivy:在对 ListAdapter 数据进行排序时无法更新 ListView

python - Kivy:检查功能是否已安排

python - 从网格网格生成的子数组构建 3D 数组并引入第 3 维

python - 交互式地改变 Bokeh 图中的字形

压缩对象上的 python map()

python - 显示错误 ValueError : MDTabsLabel. 颜色格式无效的选项卡 (got []) -Kivymd