単独で動作するコードの基本形

先週のコード(proto1.py)をあれこれいじったのであるが、demoコードを改造するのと違って大部分を自分で書かなければいけない状況になると、エラーの嵐でまともに動くものなどまだ作れない。今回も、wx.TextCtrlの引数の"style=TE_MULTILINE"の"style="を忘れてかなり悩んだ。なにやってるんだか。

demoのサンプルはrun.pyとか他のソースがないと動作しないので、初心者には少し敷居が高い。今後は、以下のproto_test.pyの形を基本形として練習することにする。

import wx

class MyFrame(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title,
                          pos=(150,150), size=(650,400))

        f = open("simple.py", "r")
        msg = f.read()
        f.close()

        StTxt = wx.TextCtrl(self, -1, msg, style=wx.TE_MULTILINE)
        
class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, "Simple GUI")
        frame.Show()
        return True

app = MyApp(0)
app.MainLoop()

このproto_test.pyは単にファイルの内容を表示しているだけ。
wx.Appを親とするMyAppクラスでウィンドウの外枠?を定義して、wx.Frameを親とするMyFrameでその枠の中のウィジェットを配置している?

"def __init__" と"def OnInit"の役割の違いがいまいち不明。どちらもコンストラクタのような気がするが、wx.Appを継承するときはいつもOnInitだ。__init__は使わない?

もう少し勉強が進めば理解できる日がくる(はずな)ので、その日のためにメモを残しておく。