1

私はこのような2つのクラスを持っています:

class ClassNrOne(wx.Frame):
    def __init__(self,parent,id):
        wx.Frame.__init__(self,parent,id,'Title',size=(1024,600))
        self.panel = wx.Panel(self,size=(1024,600))
        self.mybutton = wx.Button(self.panel,label="OK",pos=(215,160),size=(80,40))
        self.Bind(wx.EVT_BUTTON, ClassNrTwo.do, self.mybutton)

class ClassNrTwo(wx.Panel):
    def __init__(self,parent,id):
        wx.Panel.__init__(self, parent,id)
        self.newpanel = wx.Panel(self,size=(1024,600))
    def do(self,event):
        # do something

これを実行しようとすると、「'ClassNrOne' オブジェクトに属性 'ClassNrTwo' がありません」というエラー メッセージが表示されます。逆方向に試してみると -> self.Bind(wx.EVT_BUTTON, do.ClassNrTwo, self.mybutton) 「グローバル名 'do' が定義されていません」というメッセージが表示されます。別のクラスからイベントを呼び出すにはどうすればよいですか?

これに関する 2 番目の質問: 「mybutton」がクリックされたときに ClassNrTwo から「__init__」を呼び出すことも可能ですか?

編集:小さな質問をすべて1つの大きな質問にまとめました: https://stackoverflow.com/questions/12604139/need-tutorial-for-menubar-handling-panel-building

4

1 に答える 1

0

なぜそれをしたいのですか?ここで何をしようとしていますか?本当に他のクラスから関数を呼び出す必要がある場合は、インスタンスを作成してから、ClassNrTwoこのClassNrOneようなことを行うことができます。

classnrtwo = ClassNrTwo(self, wx.ID_ANY)
self.Bind(wx.EVT_BUTTON, classnrtwo.do, self.mybutton)

しかし、個人的にはそのように使用することはお勧めしません。他のクラスからイベントを呼び出すのではなく、単に他のクラス関数を使用するだけです。

2 番目の質問について__init__は、魔法の関数 (こちらで説明します) はコンストラクターのように機能しますか? 上記の例のように、クラスのインスタンスを作成すると自動的に呼び出され、__init__`ClassNrTwo' の関数も自動的に実行されます。

この助けを願って、

于 2012-09-26T13:19:55.427 に答える