问题描述
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()
这是我的奇异果文件
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:“屏幕”对象没有属性“数据” 这是问题之一,另一个问题是,每当我默认情况下将其导入到另一个文件时,它首先运行,因此在哪里使用if_name _ ==“ main ”:例如我正在使用此屏幕作为登录按钮。
解决方法
像这样保护您的run()
呼叫:
if __name__ == '__main__':
Begins().run()
在您的kv
中,该行:
on_release:root.data()
调用该data()
规则的root
对象的kv
方法。该规则的root
似乎是Screen
。来自documentation:
,root
此关键字仅在规则定义中可用并表示 规则的根窗口小部件(规则的第一个实例):
: custom: 'Hello world' Button: text: root.custom
使用了几个小时之后,我才发现它不是
on_release:root.data()
应该用
来引用on_release:app.data()
*,只需在App类中移动数据功能即可。