TypeError:add_widget()缺少1个必需的位置参数:“ screen”

时间:2019-05-18 18:02:15

标签: python typeerror

TypeError: add_widget() missing 1 required positional argument: 'screen'

如何解决此错误?还是我必须改变什么? 我对此有些陌生,没有其他问题了吗?

import kivy
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout

from kivy.lang import Builder

kivy.require("1.9.0")


class Jan(GridLayout, Screen):
    pass


class Feb(GridLayout, Screen):
    pass


class WindowManager(ScreenManager):
    pass


WindowManager.add_widget(Jan(name='Jan'))
WindowManager.add_widget(Feb(name='Feb'))


class CalenderApp(App):

    def build(self):
        return WindowManager()


customWidget = CalenderApp()

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

我认为问题出在包含.add_widget的行中。

File "C:/Users/Chris/PycharmProjects/untitled/venv/DayMap.py", line 25, in <module>
    WindowManager.add_widget(Jan(name='Jan'))
TypeError: add_widget() missing 1 required positional argument: 'screen'

1 个答案:

答案 0 :(得分:0)

基本上,在python中,应在对象obj.function(params)上调用类函数。 这是因为类函数中的第一个参数是self。并且obj作为self传递。

但是还有另一个选择:class.function(object, parameters)。在这种情况下,object将被视为self

这就是您在示例中调用add_widget的方式。但是由于您没有传递WindowManager对象,因此Jan(name='Jan')被视为self

要修复此问题,您可以例如创建WindowManager对象,然后在该对象上调用方法:

widow_menage = WindowManager()    
widow_menage.add_widget(Jan(name='Jan'))