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 件のコメント:
コメントを投稿