今回やること
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 件のコメント:
コメントを投稿