2008年4月30日水曜日

ProgressDialog(その2)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
wx.ProgressDialogは、気難しい。

GTK版@ gnome on Centos 5とwin32版@winxpでためしたけど・・・
  • wx.PD_AUTO_HIDEを設定したProgressDialogでUpdateがmaximumと同じ値を引数に呼び出されると自動的に消える。

  • maximumより大きな引数でUpdateを呼びだすとassertion failになる。

  • wx.PD_AUTO_HIDEしないで、終了時にボタンを押して閉じる。→大丈夫

  • しかし、Destroyするとこける。

  • wx.PD_AUTO_HIDEでないときにDestroy()を呼ぶとこける。つまり親が閉じるかユーザが閉じるか以外では閉じられない。

どーなっているんじゃ?すくなくともDestroyを呼んじゃいけないらしいのでDialogにmaxをセットして閉じてもらうしかないね。となると必然的にmaxを100で使うかもしくは何かでwrapしてwrapしたやつにmaxを覚えさせるのが健全だ。

なんでDestroyの話が出てくるかというとSample CodeではEventHandlerの中でNewしてDestroyしているのだ。もちろん動くし、こけたりしない。

まあ、EventHandlerとの絡みでなにかおきているのだろうが。
親frameがMDIChildだった場合がどうなるかはその後調査。


import wx

app = wx.PySimpleApp()
frame = wx.Frame(None)
pd = wx.ProgressDialog(
parent=frame,
title="progress dialog",
message="waiting completion.",
maximum = 100,
style = wx.PD_APP_MODAL
| wx.PD_ELAPSED_TIME
| wx.PD_SMOOTH
| wx.PD_AUTO_HIDE
)
count = 0
def Updator():
global count
global pd
if count <= 100:
pd.Update(count)
count += 1

timer = wx.PyTimer(Updator)
timer.Start(100, wx.TIMER_CONTINUOUS)
frame.Show()
app.MainLoop()

0 件のコメント: