2

やあみんな私はこの問題をしばらくの間デバッグしようとしていたが役に立たなかった。

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。ただし、修正や回避策を提供しているものはありませんが、フォーカスを渡すことには問題があるようです。

4

2 に答える 2

0

「テスト」ダイアログでは、「while」の代わりに「if」を使用してみてください。OKボタンを押すたびに、無限ループまたはほぼ無限ループが発生していると思われます。ユーザーが dlgAdd ダイアログで CANCEL を押した場合、プログラムはその時点でループから抜け出すため、dlgAdd を破棄することはありません。これも問題であり、おそらく「テスト」ダイアログがしばらくハングする理由です。

于 2012-05-02T14:17:10.503 に答える
0

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

于 2012-05-02T23:47:19.410 に答える