バグのある動作を示す実行可能な例を作成しました: http://pastebin.com/8KpzD4pw
この問題は非常に悪化しています。wx.ProgressDialog
ファイルの保存中にアップが発生IOError
し、進行状況ダイアログを閉じてエラー メッセージを表示したいと考えています。残念ながら、これは不可能のようです。進行状況ダイアログは、メッセージ ボックスが閉じる前に、あからさまに閉じることを拒否します。
ご覧のとおり、メッセージ ボックスは進行状況ダイアログの下に表示されるため、メッセージ ボックスの内容を確認するには、ユーザーがメッセージ ボックスに手動でフォーカスを切り替える必要があります。メッセージ ボックスを閉じると、進行状況ダイアログも消えます。保存関数のコードは次のとおりです。
def save(self, path=None):
# Show a loading dialog while the document is staving.
progress = shared.show_loading(self, 'Saving document')
try:
raise IOError('Error message')
if not path:
self.document.save()
else:
self.document.save_to_file(path)
except IOError as e:
progress.done()
message = 'Failed to save file:\n\n{}'.format(e.message)
wx.MessageBox(message, 'Error', wx.OK | wx.ICON_ERROR)
progress.done()
show_loading
および関数は、 ( source ) を使用するためのprogress.done
単なるショートカットです。wx.ProgressDialog
メッセージ ボックスを開く前に進行状況ダイアログが消えないのはなぜですか? どうすれば修正できますか?
wx.CallAfter
また、メッセージボックスを開くために使用しようとしましたが、役に立ちませんでした:
# ...
except IOError as e:
message = 'Failed to save file:\n\n{}'.format(e.message)
def show_error():
wx.MessageBox(message, 'Error', wx.OK | wx.ICON_ERROR)
progress.done()
wx.CallAfter(show_error)
# ...
また、進行状況ダイアログを閉じてからメッセージボックスを開くまでに100ミリ秒スリープしようとしましたが、wx.MicroSleep
成功しませんでした。
また、進行状況ダイアログを破棄した直後に呼び出してみwx.Yield()
ましたが、どちらも効果がありません。wx.WakeUpIdle()