我确实在stackoverflow上发现了一个问题here,但我发现它并没有回答这个问题,对我而言,Popup和ModalView实际上都没有&#c;阻止&# 39 ;.我的意思是,执行正在通过一个函数移动,如:
def create_file(self):
modal = ModalView(title="Just a moment", size_hint=(0.5, 0.5))
btn_ok = Button(text="Save & continue", on_press=self.save_file)
btn_no = Button(text="Discard changes", on_press=modal.dismiss)
box = BoxLayout()
box.add_widget(btn_ok)
box.add_widget(btn_no)
modal.add_widget(box)
modal.open()
print "back now!"
self.editor_main.text = ""
new = CreateView()
new.open()
打印声明打印出#34;现在回来了!"尽管ModalView刚刚打开,但函数的其余部分立即执行。我也尝试使用Popup而不是ModalView,结果相同。我希望在我与Popup / ModalView交互时在函数中执行暂停。有没有办法在kivy内置这个?我必须使用线程吗?或者我还需要找到其他一些解决方法吗?
答案 0 :(得分:1)
你不能这样阻止,因为这会阻止事件循环,你将无法再与你的应用程序进行交互。最简单的解决方法是将其拆分为两个函数,然后使用on_dismiss
继续:
def create_file(self):
modal = ModalView(title="Just a moment", size_hint=(0.5, 0.5))
btn_ok = Button(text="Save & continue", on_press=self.save_file)
btn_no = Button(text="Discard changes", on_press=modal.dismiss)
box = BoxLayout()
box.add_widget(btn_ok)
box.add_widget(btn_no)
modal.add_widget(box)
modal.open()
modal.bind(on_dismiss=self._continue_create_file)
def _continue_create_file(self, *args):
print "back now!"
self.editor_main.text = ""
new = CreateView()
new.open()
也可以使用Twisted使函数异步,但这有点复杂。