簡體   English   中英

AttributeError: 'super' 對象在 kivymd 請求應用程序中沒有屬性 '__getattr__' 錯誤

[英]AttributeError: 'super' object has no attribute '__getattr__' error at kivymd request app

它正在運行,而我的加載文件是 .kv 文件,但我無法在條件下切換屏幕,所以我嘗試了字符串加載文件,但現在它顯示了這個錯誤。

文件“C:\\Users\\armof\\PycharmProjects\\screen\\main.py”,第 142 行,記錄器 payload={'Uname': self.root.ids.user.text, 'psw': self.root.ids。 password.text} 文件“kivy\\properties.pyx”,第 864 行,在 kivy.properties.ObservableDict 中。 getattr AttributeError: 'super' 對象沒有屬性 ' getattr '

感謝您的努力:)

from kivymd.app import MDApp
from kivy.lang.builder import Builder
from kivy.uix.screenmanager import Screen,ScreenManager
import requests

screen_helper = """
ScreenManager:
    MenuScreen:
    ProfileScreen:
    
<MenuScreen>:
    name : "login"
    Image:
        source:"C:/arka.png"


    MDCard:
        size_hint:None,None
        size: 400,600
        pos_hint : {"center_x":0.5,"center_y":0.5}
        elevation:10
        padding:25
        spacing:25
        orientation : 'vertical'
        Image:
            source:"C:/burbantgrilogo.png"
            pos:300,380





        MDLabel:

            text:""
            id:welcome_label
            font_size:30
            halign : 'center'
            size_hint_y:None
            height:self.texture_size[1]
            padding_y:15




        MDTextFieldRound:
            id: user
            hint_text:"username"
            icon_right:"account"
            size_hint_x:None
            width: 200
            font_size:18
            pos_hint:{"center_x":0.5}

        MDTextFieldRound:
            id: password
            hint_text:"password"
            icon_right:"eye-off"
            size_hint_x:None
            width: 200
            font_size:18
            pos_hint:{"center_x":0.5}
            password:True

        MDRoundFlatButton:
            text:"LOG IN"
            font_size: 12
            pos_hint:{"center_x":0.5}
            on_press:app.logger()





        MDRoundFlatButton:
            text:"CLEAR"
            font_size: 12
            pos_hint:{"center_x":0.5}
            on_press:app.clear()

        Widget:
            size_hint_y: None
            height: 70
                
<ProfileScreen>:
    name:"Teklif"
    Image:
        source:"C:/arka.png"

    MDCard:
        size_hint:None,None
        size: 400,600
        pos_hint : {"center_x":0.5,"center_y":0.5}
        elevation:10
        padding:25
        spacing:25
        orientation : 'vertical'

        Image:
            source:"C:/burbantgrilogo.png"
            pos:300,380




        MDRoundFlatButton:
            text:"OPEN"
            font_size: 12
            pos_hint:{"center_x":0.5}

            on_release: root.current = "login"

        MDRoundFlatButton:
            text:"NEW"
            font_size: 12
            pos_hint:{"center_x":0.5}
        Widget:
            size_hint_y: None
            height: 130
            
"""
class MenuScreen(Screen):
    pass

class ProfileScreen(Screen):
    pass

sm = ScreenManager()
sm.add_widget(MenuScreen(name='login'))
sm.add_widget(ProfileScreen(name='Teklif'))

class MainApp(MDApp):
    def build(self):
        self.theme_cls.theme_style = "Light"
        self.theme_cls.primary_palette = "Red"
        screen = Builder.load_string(screen_helper)
        return screen

    def logger(self, *args):


        payload={'Uname': self.root.ids.user.text, 'psw': self.root.ids.password.text}
        print(payload)
        r = requests.get(f"http://burbant.com/otomasyon?Uname={self.root.ids.user.text}&psw={self.root.ids.password.text}")
        print(r.text)

        if r.text == 'True':

            self.root.ids.welcome_label.text = f'Hoşgeldin {self.root.ids.user.text}!'
            sm.switch_to(screen='Teklif')




        else:
            self.root.ids.welcome_label.text = f'Hatalı'
    def clear(self):
        self.root.ids.welcome_label.text = ""
        self.root.ids.user.text = ""
        self.root.ids.password.text = ""


MainApp().run()

問題在於self.root.ids是一個空字典,因此嘗試訪問該空字典中的任何鍵都會導致該錯誤。 您嘗試訪問的ids位於MenuScreen實例中,您可以使用ScreenManagerget_screen()方法訪問該get_screen() ,如下所示:

def logger(self, *args):
    menuscreen = self.root.get_screen('login')
    payload = {'Uname': menuscreen.ids.user.text, 'psw': menuscreen.ids.password.text}
    print(payload)
    .
    .
    .

您的代碼中的其他地方也有同樣的錯誤。 無論您在哪里擁有self.root.ids ,您都需要應用類似的邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM