объект .__ init __ () не принимает аргументов - PullRequest
0 голосов
/ 27 апреля 2020

Итак, я сейчас создаю приложение, в котором есть функция входа в систему, а также главное окно, в котором есть функция меню. Я столкнулся с проблемой с кодом при получении ошибки:

File "C:\Users\Muna Abdullahi\AppData\Local\Programs\Python\Python37-32\lib\site-packages\kivy\uix\widget.py", line 350, in __init__ super(Widget, self).__init__(**kwargs) File "kivy\_event.pyx", line 243, in kivy._event.EventDispatcher.__init__ TypeError: object.__init__() takes no arguments

Это мой код:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import ObjectProperty
from kivy.uix.popup import Popup
from kivy.uix.label import Label
from kivy.core.window import Window
from database import DataBase
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.widget import Widget
from kivy.config import Config

Window.clearcolor = (0.5294, 0, 0.3176, 0)

Config.set('kivy', 'keyboard_mode', 'systemandmulti')

class ForgotWindow(Screen):
    namee = ObjectProperty(None)
    email = ObjectProperty(None)

   def VerificationBtn(self):
       pass

   def loginBtn(self):
       sm.current = "login"

class CreateAccountWindow(Screen):
    namee = ObjectProperty(None)
    email = ObjectProperty(None)
    password = ObjectProperty(None)

    def submit(self):
        if self.namee.text != "" and self.email.text != "" and self.email.text.count("@") == 1 and self.email.text.count(".") > 0:
            if self.password != "":
                db.add_user(self.email.text, self.password.text, self.namee.text)

                self.reset()

                sm.current = "login"
           else:
               invalidForm()
       else:
           invalidForm()

   def login(self):
       self.reset()
       sm.current = "login"

   def reset(self):
       self.email.text = ""
       self.password.text = ""
       self.namee.text = ""

   def createBtn(self):
       self.reset()
       sm.current = "create"


class LoginWindow(Screen):
    email = ObjectProperty(None)
    password = ObjectProperty(None)

    def loginBtn(self):
        if db.validate(self.email.text, self.password.text):
            MainWindow.current = self.email.text
            self.reset()
            sm.current = "main"
        else:
            invalidLogin()

    def createBtn(self):
        self.reset()
        sm.current = "create"

    def forgot(self):
        self.reset()
        sm.current = "forgot"

    def reset(self):
        self.email.text = ""
        self.password.text = ""


class MainWindow(BoxLayout):
    pass

class Screen_One(Screen):
    pass

class Screen_Two(Screen):
    pass



class WindowManager(ScreenManager):
    pass


def invalidLogin():
    popup = Popup(title='Invalid Login',
                  content=Label(text='Invalid username or password.'),
                  size_hint=(None, None), size=(400, 400))
    popup.open()


def invalidForm():
    popup = Popup(title='Invalid Form',
                  content=Label(text='Please fill in all inputs with valid information.'),
                  size_hint=(None, None), size=(400, 400))

    popup.open()


kv = Builder.load_file("my.kv")

sm = WindowManager()
db = DataBase("users.txt")

screens = [LoginWindow(name="login"), 
CreateAccountWindow(name="create"),ForgotWindow(name="forgot"), 
MainWindow(name="main"), Screen_One(name="Screen_One"), 
Screen_Two(name="Screen_Two")]
for screen in screens:
    sm.add_widget(screen)

sm.current = "login"


class MyMainApp(App):
    def build(self):
        return sm

if __name__ == "__main__":
    MyMainApp().run() `

Если вам нужен мой файл kivy а также я могу это переслать.

Может кто-нибудь помочь мне с этим? Мне нужно, чтобы код был исправлен в ближайшее время, поскольку он является частью моего школьного проекта. Кроме того, если кто-нибудь может помочь мне с Киви, в целом, это было бы здорово, спасибо.

1 Ответ

0 голосов
/ 28 апреля 2020

Ваш класс MainWindow расширяет BoxLayout, но BoxLayout не поддерживает атрибут name. Вам просто нужно удалить аргумент name из создания MainWindow:

MainWindow(name="main")

должно быть просто:

MainWindow()
...