Python 如何在kivy中使用blocking MessgeBox

Python 如何在kivy中使用blocking MessgeBox,python,qt4,kivy,blocking,Python,Qt4,Kivy,Blocking,我有一个Kivy应用程序 在主GUI中,我想打开一个新的消息框,并强制主GUI等待操作框交互的结果 我看到Qt4消息框支持这种阻塞调用类型,但我还没有在Kivy中找到相应的功能。是否存在此类功能?弹出窗口小部件用于创建模式弹出窗口。默认情况下,弹出窗口将覆盖整个“父”窗口。创建弹出窗口时,必须至少设置popup.title和popup.content小部件 模态表示阻塞:) 这里有一个代码片段,它完成了这项工作,尽管它实际上并不是真正的阻塞。 为了继续使用,您需要定义一个或两个跳转到的备选方案

我有一个Kivy应用程序

在主GUI中,我想打开一个新的消息框,并强制主GUI等待操作框交互的结果


我看到Qt4消息框支持这种阻塞调用类型,但我还没有在Kivy中找到相应的功能。是否存在此类功能?

弹出窗口小部件用于创建模式弹出窗口。默认情况下,弹出窗口将覆盖整个“父”窗口。创建弹出窗口时,必须至少设置popup.title和popup.content小部件

模态表示阻塞:)


这里有一个代码片段,它完成了这项工作,尽管它实际上并不是真正的阻塞。 为了继续使用,您需要定义一个或两个跳转到的备选方案 节目。这就是伪阻塞技巧

import kivy
from kivy.uix.popup import Popup
from kivy.uix.button import Button
from kivy.uix.gridlayout import GridLayout
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.app import App

class MessageBoxApp(App):

    def build(self):
        return Button(text='Press for MessageBox!', on_press=self.callpopup)

    def callpopup(self, event):
        dlg = MessageBox(self, titleheader="Title Header", message="Any Message", 
        options={"YES": "printyes()", "NO": "printno()", "CANCEL": ""})
        print "Messagebox shows as kivy popup and we wait for the user action"

    def printyes(self):
        # routine for going yes
        print "You chose the Yes routine"

    def printno(self):
        # routine for going no
        print "You chose the No routine"

class MessageBox(MessageBoxApp):
    def __init__(self, parent, titleheader="Title", message="Message", options={"OK": ""}, size=(400, 400)):

        def popup_callback(instance):
            "callback for button press"
            self.retvalue = instance.text
            self.popup.dismiss()

        self.parent = parent
        self.retvalue = None
        self.titleheader = titleheader
        self.message = message
        self.options = options
        self.size = size
        box = GridLayout(orientation='vertical', cols=1)
        box.add_widget(Label(text=self.message, font_size=16))
        b_list =  []
        buttonbox = BoxLayout(orientation='horizontal')
        for b in self.options:
            b_list.append(Button(text=b, size_hint=(1,.35), font_size=20))
            b_list[-1].bind(on_press=popup_callback)
            buttonbox.add_widget(b_list[-1])
        box.add_widget(buttonbox)
        self.popup = Popup(title=titleheader, content=box, size_hint=(None, None), size=self.size)
        self.popup.open()
        self.popup.bind(on_dismiss=self.OnClose)

    def OnClose(self, event):
        self.popup.unbind(on_dismiss=self.OnClose)
        self.popup.dismiss()
        if self.retvalue != None and self.options[self.retvalue] != "":
            command = "self.parent."+self.options[self.retvalue]
            exec command

if __name__ == '__main__':
    MessageBoxApp().run()

我的意思是:打开后弹出。我想要在弹出窗口上捕获用户操作的主流。例如:弹出窗口有3个按钮:按钮A、按钮B和按钮C。我想让主流等待哪个按钮点击弹出窗口。这与javascript中警报函数的过程相同。请帮帮我。谢谢。我被要求不要使用回调函数来通知从弹出消息框到主gui的更改。也许是你想要的。。。模态视图将被阻止,直到它被告知关闭。。。或者也许我不明白你的要求。。。。