wxPythonにおけるwx.Frameの親子関係:勘当篇
タイトルが不快であったとしても、そこは深い意味を持ちません。
あるいは、僕の人間の底は浅いというだけのことです。
閑話休題。
今回も小ネタです。
有り体に言うと、
TopWindowから子となるウィンドウを呼び出す
です。
遊びで、子どもの方はテキストエディタ風味にしてみました。
#!/usr/bin/env python #coding: utf-8 import wx import os class NoteFrame(wx.Frame): def __init__(self,parent,title): wx.Frame.__init__(self,parent,title=title,size=(200,100)) self.control=wx.TextCtrl(self,style=wx.TE_MULTILINE) self.Show(True) class MyApp(wx.App): def OnInit(self): frame=wx.Frame(None,wx.ID_ANY,u"PyShell") frame.Show(True) noteframe=NoteFrame(frame,'Small Editor') self.SetTopWindow(frame) return True app = MyApp(0) app.MainLoop()
実行すると、ただのウィンドウと共に、文字入力が可能になった(だけの)ウィンドウが別に表示されます。この、入力可能な方が子ウィンドウです。
実行できたら、試しに子ウィンドウを閉じてから親ウィンドウを閉じる、次はその逆とやってみて、挙動の違いを見てみてください。
親ウィンドウが閉じられたら、子ウィンドウも閉じますよね?(なんつーネタバレ)
些細なネタですが、応用すれば特定のボタンを押したら、別ウィンドウでエディタ表示など、凝ったものを作りたいとか思ったときに便利だと思います。
追記:
「ちょっといろいろ弄ったけど、これ書き方あってるかなあ?ま、動いてるし、いっか!」Ver.
※アイコン付けてるので、コードコピーのままでは実行できないです。
#!/usr/bin/env python #coding: utf-8 import wx import os class NoteFrame(wx.Frame): def __init__(self,parent,id,title): wx.Frame.__init__(self,parent,title=title,size=(200,100)) self.control=wx.TextCtrl(self,style=wx.TE_MULTILINE) self.Show(True) class ShellFrame(wx.Frame): def __init__(self,parent,id,title): wx.Frame.__init__(self,parent,id=id,title=title,size=(320,240)) icon=wx.Icon("icon/AppIco.ico",wx.BITMAP_TYPE_ICO) self.SetIcon(icon) self.Show(True) class MyApp(wx.App): def OnInit(self): mainframe=ShellFrame(None,wx.ID_ANY,u'PyShell') noteframe=NoteFrame(mainframe,wx.ID_ANY,u'Small Editor') self.SetTopWindow(mainframe) return True app = MyApp(0) app.MainLoop()