我用...
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等待外部触发器关闭?
答案 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()