Получение TypeError: object .__ init __ () не принимает параметров Kivy - PullRequest
0 голосов
/ 08 мая 2020

Я разработал приложение с 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 файлом в суперфункции.

I верю, что можешь мне помочь.

Спасибо за ответы и помощь!

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Как указано правильно, вы передаете несуществующий класс аргумент 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}) 

Я добавил города в метод init в качестве аргумента и изменил текст меток на города (я предполагаю, что города - это строка). Таким образом, это должно работать, но если вы создаете новый экземпляр ClinicBanner, вам всегда нужно добавлять аргумент города. Если вы этого не хотите, вы можете изменить метод инициализации на def __init__(self, cities="", **kwargs):, чтобы добавить по умолчанию пустую строку. Надеюсь, теперь у вас работает.

0 голосов
/ 08 мая 2020

Ошибка означает, что вы передаете суперклассу аргументы, которых он не ожидает. В данном случае это, вероятно, аргумент cities, но я не стал внимательно его рассматривать. Не передавайте аргумент родителю, потому что он не имеет к нему никакого отношения.

...