繁体   English   中英

我不知道为什么,但我收到错误消息:“AttributeError: 'super' object has no attribute '__getattr__'”

[英]I am not sure why but I am getting error: “AttributeError: 'super' object has no attribute '__getattr__'”

我有一些代码:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
import json

Builder.load_file('design.kv')

class AttrGetter:
    def __getattr__(self, item):
        raise AttributeError(item)


class WelcomePage(Screen):
    def go_to_sign_up(self):
        self.manager.current = "register_page"
    def go_to_login(self):
        self.manager.current = "login_screen"

class RegisterPage(Screen, AttrGetter):
    def add_user(self, schoolname, contactname, jobtitle, schoolemailaddress, phonenumber, numberofyeargroupstoberegistered, numberofregisteringchildren, whichyeargroupsbeingregistered):
        with open("register_details.json") as file:
            register_details = json.load(file)

            register_details[schoolname] = {'school_name': schoolname, 'contact_name': contactname, 'job_title': jobtitle,
            'school_email_address': schoolemailaddress, 'phone_number': phonenumber, 'number_of_year_groups_to_be_registered':numberofyeargroupstoberegistered, 'number_of_registering_children': numberofregisteringchildren, 'which_year_groups_being_registered': whichyeargroupsbeingregistered}
            
            with open("register_details.json", "w") as file:
                json.dump(register_details, file)
            self.manager.current = 'register_page_success'
    def go_to_login(self):
        self.manager.current = "login_screen"
    



class LoginScreen(Screen, AttrGetter):
    def login(self, emailID, password):
        with open("register_details.json", encoding = 'utf-8') as file:
            register = json.load(file)
        if emailID.values() == emailID and password.values() == password:#emailID in register and password in register:
            print('hi!')#self.manager.current = 'login_screeen_success'
        else:
            print('bye!')#self.ids.login_wrong.text = "Wrong username or password!"

class RegisterPageSuccess(Screen):
    pass

class RootWidget(ScreenManager):
    pass

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


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

然后我还有一个 kivy 文件:

<WelcomePage>:
GridLayout:
    cols: 1
    GridLayout:
        cols: 1
        Label:
            text: "Welcome"
        Button:
            text: "register"
            on_press: root.go_to_sign_up
        Button:
            text: "login"
            on_press: root.go_to_login


<RegisterPage>:
    GridLayout:
        cols: 1
        GridLayout:
            cols: 1
            Label:
                text: "Register Page"
                font_size: "20sp"
            TextInput:
                id: schoolname
                hint_text: "School Name"
            TextInput:
                id: contactname
                hint_text: "Contact Name"
            TextInput:
                id: jobtitle
                hint_text: "Job Title"
            TextInput:
                hint_text: "emailID"
            TextInput:
                id: phonenumber
                hint_text: "Phone number"
            TextInput:
                id: numberofyeargroupstoberegistered
                hint_text: "Number of Year group to be registered"
            TextInput:
                id: numberofregisteringchildren
                hint_text: "Nummber of registering children"
            TextInput:
                id: whichyeargroupsbeingregistered
                hint_text: "Which yeargroups being registered"
            TextInput:
                id: password
                hint_text: "Password"
            Button:
                text: "Submit"
                on_press: root.add_user(root.ids.schoolname.text, root.ids.contactname.text, root.ids.jobtitle.text, root.ids.schoolemailaddress.text, root.ids.phonenumber.text, root.ids.numberofyeargroupstoberegistered.text, root.ids.numberofregisteringchildren.text, root.ids.whichyeargroupsbeingregistered.text)
            Button:
                text: "Already have an account? Click here to log in"
                on_press: root.go_to_login()


<LoginScreen>:
    GridLayout:
        cols: 1
        GridLayout:
            cols: 1
            Label:
                text: "Login Page"
                font_size: "20sp"
            TextInput:
                id: emailID
                hint_text: "emailID"
            TextInput:
                id: password
                password: True
                hint_text: "Password"
            Button:
                text: "Login"
                on_press: root.login(emailID, password)
            Button:
                text: "Don't have an account? Click here to sign up"
                on_press: root.go_to_sign_up()

<RegisterPageSuccess>:
    GridLayout:
        cols: 1
        GridLayout:
            cols: 1
            Label: 
                text: "You have logged in!"

<RootWidget>:
    # WelcomePage:
    #     name: "welcome_page"
    RegisterPage:
        name: "register_page"
    LoginScreen:
        name: "login_screen"
    RegisterPageSuccess:
        name: "register_page_success"

出于某种原因,我收到错误消息:“AttributeError: 'super' object has no attribute ' getattr '” 当我输入登录页面 textinput 和 registerpage 的值时,会出现此错误。 我已经尝试寻找解决方案,但找不到。 当我在代码的 register_page 部分输入值时,我需要程序将我提供的数据存储到某个名为“register_details.json”的空 json 文件中。 然后,显然,当我将 emailID 和密码输入 login_screen 时,它需要从 json 文件中检查 emailID 和密码是否正确。

您正在尝试访问一个不存在的idschoolemailaddress 您可以通过简单地定义它来解决这个问题:

        TextInput:
            id: schoolemailaddress
            hint_text: "emailID"

此外,在您的kv中,您可以直接使用对象的id引用对象。 您不需要root.ids前缀:

        Button:
            text: "Submit"
            on_press: root.add_user(schoolname.text, contactname.text, jobtitle.text, schoolemailaddress, phonenumber.text, numberofyeargroupstoberegistered.text, numberofregisteringchildren.text, whichyeargroupsbeingregistered.text)
            

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM