wxPythonにはwx.ProgressDialogというものがあります。
このダイアログは時間がかかる処理を行うときに、その進捗を表示するものです。
例えばですが、アプリの起動時に様々なものをインポートする必要があり、その進捗をプログレスダイアログで表示、終わったらそのダイアログを閉じてメインウィンドウを表示するといったものがあると思います。
ちょっと雑にコードを書いてみましたが、こんなものでしょうか。
import wx
import time
app = wx.App(0)
dialog = wx.ProgressDialog("あー","",maximum=100)
dialog.Show()
time.sleep(1)
dialog.Update(20)
time.sleep(3)
dialog.Update(80)
time.sleep(2)
dialog.Update(90)
time.sleep(1)
dialog.Destroy()
frame = wx.Frame(None,-1,"メインフレームです")
frame.Show(True)
app.MainLoop()
非常に適当に作ったので何がしたいのかわからないただの遅延行為ですが、こういうものだったとします。
それにしても、ProgressDialogだとなぜかtime.sleep処理を行っても応答なしを回避できるんですよね。
しかし、これで実行すると、後から出てくるメインウィンドウがなぜか後ろ(背面)にいってしまいます。
流れとしては以下のような感じ。
ただ、その原因は意外と単純なものでして、
parentを指定してねーぞ!!
というものでした。
ダイアログなのに、親ウィンドウを指定してないからこういうことになるのでしょうか。
仕方ないのでwx.Frameの初期化を、ダイアログを表示する前にしておきます。
するとコードはこんな感じになるでしょうか。
import wx
import time
app = wx.App(0)
frame = wx.Frame(None,-1,"メインフレームです")
dialog = wx.ProgressDialog("あー","",maximum=100,parent=frame)
dialog.Show()
time.sleep(1)
dialog.Update(20)
time.sleep(3)
dialog.Update(80)
time.sleep(2)
dialog.Update(90)
time.sleep(1)
dialog.Destroy()
frame.Show(True)
app.MainLoop()
| 無事前面にでた。 |
ということで割と単純な原因で、「parent(親ウィジェット)を指定していないから」でした。日本語で検索しても出てこなかった(そのそのこんなこと誰も調べないか)ので今回は書いてみいました。解決には英語で検索したら出てきた以下を参考にさせていただきました
もうすぐ3月も終わり4月になりますね。
私もJK(情報系高専生)2年生になります。
ちなみに4月からはアニメ、Summer Pocketsがはじまるので楽しみです。
原作をやってたわけではありませんが、Keyのアニメということで。
ではでは。


0 件のコメント:
コメントを投稿