Kivy相当于tkinter的messagebox

时间:2014-04-19 21:17:45

标签: python messagebox kivy

我试图将程序从tkinter转换为Kivy。当我到达我使用messagebox.askyesno的部分时,我想我可以创建一个带有几个按钮的弹出窗口,我就完成了。我遇到的问题是,虽然Kivy的popup和tkinter的消息框都是模态的,但当我在函数中调用messagebox.askyesno时,messagebox将暂停当前函数的所有执行直到消息框被销毁,而弹出窗口将允许该功能完成。我原来的节目有

flag = messagebox.askyesno(message='...',parent=self)
if flag:
    #Stuff if flag is true
else:
    #Stuff if flag is false

但是,由于弹出窗口将打开,因此无法使用Kivy弹出窗口,程序将继续执行。有没有办法停止执行,直到弹出窗口被破坏,或者解决问题的另一种方法?

基本思想是双人游戏的准对话。这里,程序询问一个玩家是否想要执行动作,例如移动棋子。如果玩家说"是,"然后第二位玩家获得messagebox.askyesno反击。一个简单的比喻就是将一名跑垒员从一垒打入三垒打入三垒。如果他想要推进跑步者,或者让跑步者保持在第二位,你将不得不问进攻队。如果答案是肯定的,那么该计划将不得不向防守队员询问他是否想要投三分。绝对有可能创建一个函数来处理askyesno的每个实例,并使用适当的绑定,但它似乎过多。

1 个答案:

答案 0 :(得分:2)

我不太熟悉tkinter如何处理事情,但kivy需要一个稍微不同的心理模型。你不想在python代码之间停止和启动eventloop,而是可能想要启动弹出窗口,将所需的任何状态传递给它或将其存储在其他地方,然后绑定弹出窗口的结果(例如,用户按下“完成”按钮)进行一些新功能,完成剩余的计算。

如果您愿意,我可以提供一个示例,特别是如果您提供有关您正在尝试做的事情的更多信息。