Kivy:如何创建“阻塞”弹出窗口/模态视图?

时间:2015-04-16 00:25:56

标签: python python-2.7 kivy

我确实在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内置这个?我必须使用线程吗?或者我还需要找到其他一些解决方法吗?

1 个答案:

答案 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使函数异步,但这有点复杂。