您好,我正在用Python开发一个简单的界面应用程序,该应用程序将使清单表单可以轻松,直观地输入到访问数据库中。
我目前具有以下功能:
def spawnerror(self, errormsg):
self.running = False
content = Button(text=errormsg)
popup = Popup(title='ERROR!', content=content, auto_dismiss=False)
content.bind(on_press=popup.dismiss)
popup.open()
我已经完成了适当的错误处理,并且应用程序按预期使用了此功能。例如,如果某人未在必填字段中输入,它将调用此函数并生成带有错误的错误页面并通知用户。
我遇到的问题是,它需要将类变量 running 设置为False,因为在主函数“提交”的末尾它会检查该变量以及self.running == False,那么它需要跳过访问数据库中数据输入的执行。
该函数为什么不将运行的类变量设置为false?
答案 0 :(得分:1)
在示例中,类属性running
被定义为BooleanProperty。在spawnerror()
函数中,它使用App.get_running_app()
函数获取App类的实例,然后访问变量running
。
如果正在运行, spawnerror()函数和 submit()函数位于不同的类中,则计算出这些类之间的关系并通过他们之间的直接参考。
from kivy.app import App
from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import BooleanProperty, ObjectProperty
class RootWidget(BoxLayout):
instance = ObjectProperty(None)
def __init__(self, **kwargs):
super(RootWidget, self).__init__(**kwargs)
self.instance = App.get_running_app()
self.spawnerror('Testing')
def spawnerror(self, errormsg):
self.instance.running = False
content = Button(text=errormsg)
popup = Popup(title='ERROR!', content=content, auto_dismiss=False)
content.bind(on_press=popup.dismiss)
popup.open()
class TestApp(App):
running = BooleanProperty(True)
def build(self):
print("\nbuild:")
self.display_attributes()
return RootWidget()
def on_stop(self):
print("\non_stop:")
self.display_attributes()
def display_attributes(self):
print("\tApp.running =", self.running)
if __name__ == "__main__":
TestApp().run()