今回やること
wxPythonで複数のウィンドウを表示させる方法を紹介します。そのままwx.Frameで複数表示させることもできるし、wx.Dialogで複数表示させることもできます。
そのまま2つ表示させてみる
import wx app = wx.App(False) frame1 = wx.Frame(None,-1,"ウィンドウ1") panel1 = wx.Panel(frame1,-1) lbl = wx.StaticText(panel1,-1,"ウィンドウ1のパネルです") frame1.Show(True) frame2 = wx.Frame(None,-1,"ウィンドウ2") panel2 = wx.Panel(frame2,-1) btn = wx.Button(panel2,-1,"ウィンドウ2のボタンです") frame2.Show(True) app.MainLoop()
このように連続してウィンドウを表示させるようにしました。
app.MainLoop()は一番最後にしないといけません。
ボタンのクリック動作で表示させる
import wx class MainFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,"メインウィンドウ") panel = wx.Panel(self,-1) button = wx.Button(panel,-1,"もう一つのウィンドウを表示") button.Bind(wx.EVT_BUTTON,self.OnButton) #クリックされたらOnButtonに渡すようにする self.Show(True) def OnButton(self,event): #ウィンドウの表示 #多重起動を防止 if self.FindWindowByName('もうひとつのウィンドウ') is None: SubFrame() else: wx.MessageBox("既に表示されてます") class SubFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,"もうひとつのウィンドウ") panel = wx.Panel(self,-1) lbl = wx.StaticText(panel,-1,"もうひとつのウィンドウです",pos=(20,20)) self.Show(True) if __name__ == "__main__": app = wx.App(0) MainFrame() app.MainLoop()
ボタンを押すことで、新しいウィンドウが表示されるようになりました。また、多重起動も防止することができました。
ダイアログを表示
ウィンドウではなくダイアログを表示させます。ダイアログが表示されると、後ろのメインウィンドウをいじれなくなります。
ここが、普通のウィンドウとの違いです。
import wx class MainFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,"メインウィンドウ") panel = wx.Panel(self,-1) button = wx.Button(panel,-1,"ダイアログを表示") button.Bind(wx.EVT_BUTTON,self.OnButton) #クリックされたらOnButtonに渡すようにする self.Show(True) def OnButton(self,event): SubFrame() #ダイアログを表示させる class SubFrame(wx.Dialog): def __init__(self): wx.Dialog.__init__(self,None,-1,"ダイアログ") panel = wx.Panel(self,-1) lbl = wx.StaticText(panel,-1,"ダイアログです",pos=(20,20)) self.ShowModal() #裏のウィンドウをいじれなくるために、ShowModal()にしている if __name__ == "__main__": app = wx.App(0) MainFrame() app.MainLoop()
見た目はさっきのと似てますが、裏のメインウィンドウがいじれなくなるところが違います。
どのような場面で使えるか
「設定」のダイアログを出すときや、単純にもうひとつのツールを起動するために、もうひとつのウィンドウを呼び出すなどに使えます。
動作環境
Python 3.9.1
Windows 10
64bit
wxPython 4.1.1a1
おすすめ:
wxPythonの今スグ使えるサンプル集18個!GUI開発をマスターしよう!
今回はwxPythonのサンプルを18個紹介したいと思います。
wxPythonはウィジェットが豊富で自由度が高いので、応用するといろいろなツールが作成できます。
よくわからないことや、感想などはコメントお願いします!
0 件のコメント:
コメントを投稿