我正试图将程序从tkinter过渡到Kivy。当我到了一个使用messagebox.askyesno
的部分时,我想我可以用一些按钮创建一个弹出窗口,然后我就完成了。我遇到的问题是,虽然Kivy的弹出窗口和tkinter的消息框都是模态的,但当我在函数中调用messagebox.askyesno
时,messagebox将暂停当前函数的所有执行,直到消息框被销毁,而弹出窗口将允许函数完。我原来的计划不得不Kivy等同于tkinter的消息框
flag = messagebox.askyesno(message='...',parent=self)
if flag:
#Stuff if flag is true
else:
#Stuff if flag is false
然而,这不会有Kivy弹出工作,因为弹出窗口将打开,程序将继续执行。有没有办法停止执行,直到弹出窗口被销毁,或以其他方式解决问题?
基本思想是双人游戏的准对话。在这里,程序询问一个玩家是否想要执行一个动作,比如移动一块。如果玩家说“是”,那么第二位玩家得到messagebox.askyesno
作为反击。一个简单的比喻就是推动一名垒球运动员从一垒到三垒。如果他想要推进跑步者,或者让跑步者保持第二名,你将不得不问问进攻球队。如果答案是肯定的,那么该计划将不得不询问防守球队是否想要屈居第三。它肯定有可能创建一个函数来处理askyesno的每个实例,并带有适当的绑定,但似乎过多。
您的评估是我曾经考虑的事情,如果这种情况只发生一次,那么它是可行的。但是,我至少有10个askyesno实例,尽可能在每次发生时都这样做,似乎是过度杀伤。 –
为什么它会过度杀伤......你仍然只需要编写一次代码?也许你可以提供一个更完整的例子。 – inclement
我已经编辑了一个,希望更清晰地说明我正在做什么。虽然你的想法很有效,但我认为必须要有一个比打破功能更清洁的解决方案,至少在我的情况下是10个,来利用弹出窗口。 –