代码之家  ›  专栏  ›  技术社区  ›  Anurag Uniyal

WxDialog的WxProgressDialog类行为

  •  0
  • Anurag Uniyal  · 技术社区  · 15 年前

    我想创建模式对话框,但它不应该以模式方式工作,即控制流应该继续

    如果我这样做

     dlg = wx.Dialog(parent)
     dlg.ShowModal()
    
     print "xxx"
    
     dlg.Destroy()
    

    “XXX”不会被打印,但在进度对话框中

    dlg = wx.ProgressDialog.__init__(self,title, title, parent=parent, style=wx.PD_APP_MODAL)
    print "xxx"
    
    dlg.Destroy()
    

    “XXX”将被打印

    所以基本上 我想实现正常对话的wx.pd_uuu app_uuu模式?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Matt Razza    15 年前

    只使用 Show 而不是 ShowModal .

    如果你的功能 print "xxx" 部分)长时间运行,您将不得不手动调用 wx.SafeYield 每隔一段时间,或者将您的工作转移到一个单独的线程,并从中向对话框发送自定义事件。

    再给一个小费。据我所知,您希望在显示模式对话框之后执行一些代码,下面是一个特殊绑定到的小技巧 EVT_INIT_DIALOG 就这样。

    import wx
    
    class TestFrame(wx.Frame):
        def __init__(self):
            wx.Frame.__init__(self, None)
            btn = wx.Button(self, label="Show Dialog")
            btn.Bind(wx.EVT_BUTTON, self.ShowDialog)
    
        def ShowDialog(self, event):
            dlg = wx.Dialog(self)
            dlg.Bind(wx.EVT_INIT_DIALOG, lambda e: wx.CallAfter(self.OnModal, e))
            dlg.ShowModal()
            dlg.Destroy()
    
        def OnModal(self, event):
            wx.MessageBox("Executed after ShowModal")
    
    app = wx.PySimpleApp()
    app.TopWindow = TestFrame()
    app.TopWindow.Show()
    app.MainLoop()
    
        2
  •  0
  •   Anurag Uniyal    15 年前

    这是非常简单的,只是在wx中使用wx.pd_app_modal样式。dialog允许它是模式的,而不停止程序流,只有用户对app的输入被阻止,我认为pd_app_modal只用于进度对话框。