【问题标题】:Problem regarding attribute error in Kivy关于 Kivy 中的属性错误的问题
【发布时间】:2020-08-12 07:35:22
【问题描述】:
from kivy.properties import ObjectProperty
from kivy.uix.floatlayout import FloatLayout
from kivymd.app import MDApp
from kivymd.uix.screen import Screen
from kivy.lang import Builder
from Help import help
from kivymd.uix.dialog import MDDialog


class Begins(MDApp):
   def build(self):
    self.theme_cls.primary_palette = "Yellow"
    self.theme_cls.primary_hue = "A700"
    self.theme_cls.theme_style = "Dark"
    screen = Screen()
    self.id_v = Builder.load_string(help)
    screen.add_widget(self.id_v)

    return screen

class My(FloatLayout):
   scr = ObjectProperty(None)
   def data(self):
       username = self.id_v.user.text
       password = self.id_v.passw.text
       if username == "MD" and password == "kivy":
          print('ok')
       else:
          dial=MDDialog(text='Opps Wrong!')
          dial.open()


Begins().run()

这是我的 kivy 文件

   help = """
   Screen:
   id:scr    
   user:user
   passw:passw
   FloatLayout:    
    
    MDTextField:
        id: user
        hint_text : "Enter your Name"
        helper_text : "Have u forget it?"
        helper_text_mode : "on_focus"
        icon_right : "android"
        icon_right_color : app.theme_cls.primary_color
        size_hint_x :None
        width : '300'
        pos_hint:{'center_x':0.5,'center_y':0.6}
    MDTextField:    
        id: passw
        hint_text : "Enter your Password"
        helper_text : "Got it?"
        helper_text_mode : "on_focus"
        icon_right : "key"
        icon_right_color : app.theme_cls.primary_color
        size_hint_x :None
        width : '300'
        pos_hint:{'center_x':0.5,'center_y':0.5}
        pass: True
    MDRectangleFlatButton:
        text:"Log in"
        pos_hint:{'center_x': 0.5, 'center_y': 0.4}
        on_release:root.data()

"""

显示 AttributeError: 'Screen' object has no attribute 'data' 这是问题之一,另一个问题是每当我将其导入另一个文件时,默认情况下它首先运行,所以在哪里使用 if_name_=="main":比如我正在使用这个屏幕作为登录按钮。

【问题讨论】:

    标签: python android python-3.x kivy kivymd


    【解决方案1】:

    像这样保护您的run() 电话:

    if __name__ == '__main__':
        Begins().run()
    

    在您的kv 中,该行:

    on_release:root.data()
    

    正在调用 kv 规则的 root 对象的 data() 方法。该规则的root 似乎是Screen。来自documentation

    此关键字仅在规则定义中可用,表示 规则的根小部件(规则的第一个实例):

    custom: 'Hello world'
    Button:
        text: root.custom
    

    【讨论】:

    • 那么,如何解决这个 data() 问题?如何从python文件调用函数到kivy?
    【解决方案2】:

    在使用了很多小时后,我才发现不是

    on_release:root.data()
    

    它应该引用它

    on_release:app.data()
    

    *只需在 App 类中移动数据函数。

    【讨论】:

    • 奇怪的是它可以工作,因为 data() 方法不在您的 App 类中。它似乎在您的 My 类中
    • 是的,你说得对,我刚刚在 App 类中移动了 data()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 2011-08-04
    • 1970-01-01
    相关资源
    最近更新 更多