2012-05-02 9 views
2

ちょっと私はこの問題をしばらくの間デバッグしようとしています。FileDialog ShowModalの後でMessageDialogが応答しない

FileDialogを呼び出すボタンにバインドされた関数を定義しました。ユーザーが[OK]をクリックすると、関数が再開します。 ID_OKの直後に、別のディレクトリからファイルを選択するように促す簡単なダイアログを呼び出そうとしました。このメッセージダイアログが表示された直後に、ユーザーが最初のクリックで[OK]または[キャンセル]を押すことができない遅延が発生しているように見えます。ボタンを繰り返しクリックすると応答します。もし誰かが何が起こっているのか、この問題をデバッグするために何ができるのか、私は非常に感謝しています:)。私はコードスニペットを添付しました(ただし、動作はMessageDialogと同じですが、SingleChoiceDialogを使用しています)。レコードの場合、dlgは条件文の後に破棄されます。

def openFile(self, event): 
    import os 
    import re 
    import csv 
    import sets 
    import datetime 

    dlg = wx.FileDialog(self, "Choose file(s)", os.getcwd(), "", "*.*", wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR) 

    if dlg.ShowModal() == wx.ID_OK: 
     path = dlg.GetPaths() 

     test = wx.SingleChoiceDialog(self, 'Add more files from different directories?', 'Selected Files', path, style=wx.CHOICEDLG_STYLE) 

     while test.ShowModal() == wx.ID_OK: 
      dlgAdd = wx.FileDialog(self, "Choose file(s)", os.getcwd(), "", "*.*", wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR) 
      if dlgAdd.ShowModal() == wx.ID_CANCEL: 
       break 
      dlgAdd.Destroy() 
      path = path + dlgAdd.GetPaths() 
      test = wx.SingleChoiceDialog(self, 'Add more files from different directories?', 'Selected Files', path, style=wx.CHOICEDLG_STYLE) 

     test.Destroy() 

は、より多くのオンラインいくつかの周りを掘ったと同様の問題のレポートが見つかりました:http://comments.gmane.org/gmane.comp.python.wxpython/55470を。しかし、問題の解決策を提示していないが、焦点を合わせることで問題に見える。

答えて

0

「テスト」ダイアログに「while」の代わりに「if」を使用してみてください。私はあなたがOKボタンを押すたびに、無限またはほぼ無限ループのことが起こっていると考えています。ユーザーがdlgAddダイアログでCANCELを押すと、プログラムはdlgAddを破棄しないので、dlgAddはその時点でループから抜けることはありません。それはまた問題であり、おそらくなぜ "テスト"ダイアログがしばらく掛かっているのでしょうか。

+0

Hmmm whileループを完全に削除しても、dlgAdd.ShowModal()== wx.ID_OK:関数を開始するだけで、この単純化が望ましい機能ではない場合でも、問題は引き続き解決されます。 –

+0

この問題を実際に説明するには、応答しないことが最善の言葉ではないかもしれません。面白いことに、ダイアログがポップアップして、OKまたはCANCELボタンを最初にクリックしてサイズ変更、移動、ETCがすべて失敗してから1秒または10秒待つことができます。ダイアログがポップアップした後にそれに触れることができるので、それがフォーカスの問題であるかのように、OKボタンとCANCELボタンが即座に機能します。 –

0

これは、Parallelsを使用しているときにCoherenceモードを使用していることに起因するエラーです。これをオフにした後、ダイアログは完全に機能しました。

関連する問題