0
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 " : 比如我使用这个屏幕作为登录按钮。

4

2 回答 2

0

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

on_release:root.data()

它应该通过

on_release:app.data()

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

于 2020-08-13T05:37:58.713 回答
0

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

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

在您的kv, 行:

on_release:root.data()

正在调用该规则的对象的data()方法。看来该规则的 是。从文档中:rootkvrootScreen

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

<我的小部件>:

custom: 'Hello world'
Button:
    text: root.custom
于 2020-08-12T12:44:51.097 回答