Python Kivy相当于tkinter';s消息框

Python Kivy相当于tkinter';s消息框,python,messagebox,kivy,Python,Messagebox,Kivy,我正在尝试将一个程序从tkinter转换为Kivy。当我来到一个使用了messagebox.askyesno的部分时,我想我可以用几个按钮创建一个弹出窗口,我就完成了。我遇到的问题是,虽然Kivy的弹出窗口和tkinter的messagebox都是模态的,但当我在函数中调用messagebox.askyesno时,messagebox将停止当前函数的所有执行,直到messagebox被销毁,而弹出窗口将允许函数完成。我原来的计划失败了 flag = messagebox.askyesno(mes

我正在尝试将一个程序从tkinter转换为Kivy。当我来到一个使用了
messagebox.askyesno
的部分时,我想我可以用几个按钮创建一个弹出窗口,我就完成了。我遇到的问题是,虽然Kivy的弹出窗口和tkinter的messagebox都是模态的,但当我在函数中调用
messagebox.askyesno
时,messagebox将停止当前函数的所有执行,直到messagebox被销毁,而弹出窗口将允许函数完成。我原来的计划失败了

flag = messagebox.askyesno(message='...',parent=self)
if flag:
    #Stuff if flag is true
else:
    #Stuff if flag is false
但是,这将不适用于Kivy弹出窗口,因为弹出窗口将打开,程序将继续执行。有没有办法在弹出窗口被销毁之前停止执行,或者有其他办法解决问题


基本思想是两人游戏的准对话。在这里,程序询问一个玩家是否想要执行一个动作,例如移动一个棋子。如果玩家说“是”,那么第二个玩家将得到一个
messagebox.askyesno
进行反击。一个简单的类比是在棒球比赛中,用单打将一名跑步者从一垒推进到三垒。你必须询问进攻队,他是想让赛跑者领先,还是让赛跑者保持在第二位。如果答案是肯定的,那么程序将不得不询问防守队他是否想投第三名。通过适当的绑定,创建一个函数来处理askyesno的每个实例肯定是可能的,但这似乎太过分了。

我不太熟悉tkinter是如何处理事情的,但kivy在这里需要一个稍微不同的心智模型。您不想在python代码之间停止和启动eventloop,而是可能希望启动弹出窗口,将所需的任何状态传递给它或将其存储在其他位置,然后将弹出窗口的结果(例如,当用户按下“完成”按钮时)绑定到执行其余计算的某个新函数


如果您愿意,我可以提供一个例子,特别是如果您提供更多关于您正在尝试做什么的信息。

您的评估是我考虑过的,如果这种情况只发生一次,那么它是可行的。但是,我至少有10个askyesno实例,每次都这样做,虽然可能,但似乎有些过头了。为什么会过头呢?您仍然只需要编写一次代码?也许你可以提供一个更完整的例子。我已经编辑了一个,希望更清楚的例子,我正在尝试做什么。虽然你的想法可行,但我认为必须有一个比破坏函数更干净的解决方案,在我的例子中至少有10个,才能利用弹出窗口。老实说,我不知道破坏函数有什么不干净的地方,我认为这是最好的方法(也是我能想到的唯一简单的方法)。您需要做的就是创建一个适当的弹出类,该类将函数作为参数,当按下一个函数时调用它,然后您只需在弹出创建和“if flag”行之间添加新函数名(
def whatever(flag):
)。我明天可能会举个例子。它看起来不干净,因为你原来的程序是围绕阻止对话框构建的。Kivy不鼓励这种程序流程。