【发布时间】:2020-04-16 03:11:26
【问题描述】:
我目前正在使用 Python/Kivy 开发 GUI,但在调用另一个类的函数时遇到了一些问题。我设置了一个屏幕,其中包括一个 TextInput 小部件,可用于插入电子邮件地址。通过单击提交按钮,调用函数“check_mail”,该函数使用正则表达式检查电子邮件,然后打印文本(“电子邮件无效”)或更改屏幕(电子邮件地址将稍后被传输到数据库,现在只需在提交后更改屏幕即可)。但是,如果电子邮件格式无效,该函数会打印文本给我,但是当从 InsertData 类调用 change_screen 函数时,它不起作用(AttributeError: 'NoneType' object has no属性 'ids') 如果我在 .kv 文件 {on_release: app.change_screen('home_screen')} 中调用 change_screen 函数,它可以正常工作。如何从我的 InsertData 类中访问 change_screen 函数?
main.py
class HomeScreen(Screen):
pass
class InsertData(Screen):
def check_mail(self):
addressToVerify = self.ids.email_main.text
match = re.match('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$', addressToVerify)
if match == None:
print('Email not valid!')
else:
MainApp().change_screen('home_screen')
GUI = Builder.load_file("main.kv")
class MainApp(App):
def build(self):
return GUI
def change_screen(self, screen_name):
screen_manager = self.root.ids[
'screen_manager']
screen_manager.transition = CardTransition()
screen_manager.transition.direction = 'up'
screen_manager.transition.duration = .3
screen_manager.current = screen_name
MainApp().run()
insert_data.kv
<InsertData>:
FloatLayout:
canvas:
Rectangle:
size: self.size
pos: self.pos
source: "background/background_main.png"
GridLayout:
rows: 1
pos_hint: {"top": 1, "right": 1}
size_hint: 1, .8
TextInput:
id: email_main
hint_text: "E-Mail Address"
LabelButton:
text: "Submit"
on_release:
root.check_mail()
【问题讨论】:
标签: python function class kivy kivy-language