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()