python - 初始化 kivy 屏幕时遇到困难,TypeError: __init__() 需要 1 个位置参数,但给出了 2 个
问题描述
如果有人可以帮助我,我将不胜感激。我正在尝试将一个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 行,在构建中
。 apply = ApplyPage(self.projectlistscreen)
TypeError: init () 接受 1 个位置参数,但给出了 2 个
解决方案
*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)
推荐阅读
- excel - 如何使用 If-Else 语句过滤表?
- java - 无法在项目 XX 上执行目标 无法解析项目的依赖关系。返回码为:501,ReasonPhrase:HTTPS 必填
- javascript - 可以使用 CustomValidators 来防止数据输入到文本框中吗?
- html - 试图在 Bootstrap 中居中下拉菜单和图标
- swift - Swift:使用应用程序/八位字节流响应的 GET 请求
- ios - 试图让 Chatto Demo 代码在我自己的应用程序中工作并断言失败
- sql - SQL 子查询被附加为字符串而不是正确的查询
- html - 背景图像未显示在烧瓶中
- c - 如何在已经安装了 OpenSSL 的 Linux 中使用 BoringSSL?
- python - 如何仅替换数据框熊猫中最大值的第一个实例?