等待对话框“wx.MessageDialog”

时间:2014-02-11 16:28:36

标签: python wxpython wxwidgets

我用...

waitingdlg = wx.MessageDialog(self, 'Waiting for soundcard signal...', 'Test', wx.CANCEL)
waitingdlg.ShowModal()

while inputvolume < 10:       # inputvolume is a global variable
                              # modified by another thread linked to soundcard input
    wx.MilliSleep(10)

waitingdlg.Destroy()

...为了等待外部信号(例如:声卡的输入电平高于某个分贝级别)。

我希望wx.MessageDialog在触发发生时自动关闭(inputvolume成为>= 10时)。

但由于waitingdlg.ShowModal()while永远不会发生! 另一方面,如果没有ShowModal,则不会显示对话框。

如何让这个wx.MessageDialog等待外部触发器关闭?

1 个答案:

答案 0 :(得分:3)

您可以创建另一个线程来检查体积。 请使用wx.Dialog,因为wx.MessageDialog不是真正的wx.Dialog而且它不响应Destroy()。

    import wx
    import threading

    def timer_start(dlg):
        t = threading.Timer(0,test_func,(dlg,))
        t.start()

    def test_func(dlg):

        global inputvolume
        print "inputvolume: ", inputvolume

        if inputvolume < 100:
            wx.MilliSleep(10)
            timer_start(dlg)
            inputvolume += 1
        else:
            #dlg.EndModal(wx.CANCEL)
            dlg.Destroy()


    if __name__ == "__main__":
        inputvolume = 0
        app = wx.App(False)
        fame = wx.Frame(None)
        fame.Show()

        waitingdlg = wx.Dialog(fame,title = 'Test')
        timer_start(waitingdlg)
        waitingdlg.ShowModal()

        app.MainLoop()