質問

モーダルダイアログを作成したいが、モーダルな方法で動作するべきではありません。つまり、制御フローを続行する必要があります

する場合

 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__APP__MODALを達成したいですか

役に立ちましたか?

解決 2

これは非常に簡単で、wx.Dialogでwx.PD_APP_MODALスタイルを使用するだけで、プログラムフローを停止せずにモーダルにすることができ、アプリへのユーザー入力のみがブロックされます。PD_APP_MODALは進行状況ダイアログ専用です

他のヒント

ShowModal の代わりに Show を使用します。

関数( print" xxx" 部分)が長時間実行される場合、 wx.SafeYield を頻繁に手動で呼び出すか、別のスレッドで動作し、そこからダイアログにカスタムイベントを送信します。

もう1つのヒント。私が理解しているように、モーダルダイアログが表示された後にいくつかのコードを実行する必要があります。これを実現する 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()
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top