获取TypeError:object.\uuuu init\uuuuu()不接受任何参数

2024-10-02 12:25:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python开发了一个应用程序,遇到了这个问题:

TypeError: object.__init__() takes no parameters

我的文件如下:

Main.py

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.screenmanager import Screen
from kivy.uix.button import ButtonBehavior
from kivy.uix.image import Image
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from clinics.clinicsbanner import ClinicBanner
import psycopg2

class HomeScreen(Screen):
    pass
class SettingsScreen(Screen):
    pass
class InfoScreen(Screen):
    pass
class ResultScreen(Screen):
pass
class ImageButton(ButtonBehavior, Image):
    pass

GUI = Builder.load_file('main.kv')

class MainApp(App):
    def build(self):
        return GUI

    def on_start(self):
        result_banner = self.root.ids['result_screen'].ids['result_banner']
        con = psycopg2.connect(
            host="localhost",
            database="here is my db",
            user="here is my user",
            password="here is my password")

        cur = con.cursor()
        city = self.root.ids['home_screen'].ids.city.text
        cur.execute("SELECT * FROM clinic WHERE city='%s'" %city)
        rows = cur.fetchall()
        for row in rows:
            C = ClinicBanner(cities=row[1])
            result_banner.add_widget(C)
        con.commit()
        cur.close()
        con.close()

clinicbanner.py

from kivy.uix.floatlayout import FloatLayout
from kivy.uix.gridlayout import GridLayout
from kivy.uix.button import Button
from kivy.uix.label import Label

class ClinicBanner(GridLayout):
    rows = 1

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

        centre = FloatLayout()
        centre_label = Label(text=kwargs['cities'], size_hint=(1, .2), pos_hint={"top": .2,  "left": 1})
        centre.add_widget(centre_label)

        self.add_widget(centre)

我认为它可能与数据库或clinicbanner.py文件连接,在超级函数中

我相信你能帮助我

谢谢你的回答和帮助


Tags: fromimportselfidspassresultconscreen
2条回答

正如所正确指出的,您将参数传递给不存在的类C = ClinicBanner(cities=row[1])。这是城市的争论。如果您以这种方式使用它,您最好像这样编写init方法:

def __init__(self, cities, **kwargs): 
    super(ClinicBanner, self).__init__(**kwargs) 

    centre = FloatLayout() centre_label = Label(text=cities, size_hint=(1, .2), pos_hint={"top": .2, "left": 1}) 

我将cities作为参数添加到init方法中,并将标签文本更改为cities(我假设cities是str)。这样应该可以工作,但是如果您创建了一个新的实例,您现在必须始终添加cities参数。如果不希望这样,可以将init方法更改为def __init__(self, cities="", **kwargs):,以添加一个空字符串作为默认值。我希望,它现在对你有用

该错误意味着您正在将参数传递给它不期望的超类。在本例中,可能是cities参数,但我没有仔细观察。不要将参数传递给父级,因为父级与此无关

相关问题 更多 >

    热门问题