前提・実現したいこと
Python初心者です。
GUIはwxpythonを使っています。
データの読み込みをするプログラムなのですが、読み込むファイル(xlsx)が重いため時間が少しかかります。
そこで読み込んでいる間、読み込み中のウィンドウを表示して読み込みをバックグラウンドで進めたいと思ったのですが、どのようにしたらいいのかで躓いています。
やりたいこととしては
import pandas as pd import wx #ここで待機ウィンドウを表示したい。 #####エクセルデータ読み込み##### E1=pd.read_excel('E1.xlsx') E2=pd.read_excel('E2.xlsx') . . #読み込みが終わったら待機ウィンドウを閉じたい。
ウィンドウの表示自体は
if __name__ == '__main__': app = wx.App() frame = Project() frame.Show() app.MainLoop()
などでできるのは分かるのですが、当然ながらこれをデータ読み込み前に書いてしまうとMainLoopが閉じるまで処理が進みません。
Messsageウィンドウでも同様で、OKボタンを押すまで結局先に進まないため、バックグラウンドで処理が進みません。。
何かのソフトを立ち上げる際に、待機ウィンドウがぽっと出てきて終わったら本ウィンドウが立ち上がる。というソフトを良く見かけるため、不可能ではないとは思うのですが、なかなか似たような疑問や方法を見つけられず躓いております。
###自身で試したコード
import wx from time import sleep app = wx.App() frame = wx.Frame(None, wx.ID_ANY, 'Test', size=(300, 200)) frame.Show() #####エクセルデータ読み込み##### E1=pd.read_excel('E1.xlsx') E2=pd.read_excel('E2.xlsx') frame.Close() frame.Destroy() app.Destroy() print('wait') sleep(5)
この場合、ウィンドウを起動直後に立ち上げることはできますが、閉じることはできません。
app.MainLoop()を記入しないと、Close()が機能しないのか閉じられません。
sleepで5秒経ってプログラム自体が終了すれば当然ウィンドウごとプログラムは閉じられますが、それでは意味がなく…プログラムが起動している状態でウィンドウの表示と処理完了後に閉じる操作をするにはどうするのが良いのでしょうか。
##まとめ
main.pyを実行した直後に「読み込み中」のウィンドウを表示させ、読み込みが終わったらそのウィンドウを閉じる。(プログラムは稼働継続)
ということがやりたいことになります。
補足
Anacondaで構築しています。
Pythonは3.8.10
WxPythonは4.1.1です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/04 02:15 編集
2021/06/04 03:43 編集
2021/06/04 04:01
2021/06/05 03:01
2021/06/05 05:26
2021/06/07 17:57