0

状況はこちら

class App(wx.Frame):
    def __init__(self,parent,id=-1,title='Test App'):
        wx.Frame.__init__(self,parent,id,title,size=((1050,690)))

        self.mode = 'Test'


class SetModes:
    def __init__(self):
        self.GetModes = App(None,-1)

        self.appmode = ''

    def SetMode(self):
        self.appmode = self.GetModes.mode

これが機能しないことは既にわかっているため、これは単なるスクリプトの例ですが、本質的に何をしようとしているのかを示しています。明確にさせてください:

app クラスからいくつかの変数を取得して設定したいと考えています。「SetModes」クラスからこれを実行できるようにしたいと考えています。問題は、インスタンスに親を割り当てることができないため、そのインスタンスを作成できないことです。そのため、self.GetModes メソッドが機能しません。インスタンスが親を持つことができないことを教えてくれます。これは、App クラスの変数と関数の一部を使用するだけで App クラスのインスタンスを作成できないということですか??.

どうすればこれを機能させることができますか。親を必要とするクラスと通信させることはできますか?

4

2 に答える 2

1

あなたの問題の一部は、フレームをwx.Appインスタンス内から初期化する必要があり、次にMainLoop()呼び出す必要があることだと思います(このチュートリアルを参照してください。フレームに親があることに注意してくださいNone)。

その後、jdi のようなソリューションが機能します。ただし、回避できる場合は、参照を使用するのはまだ好きではありません。親が直接の子の関数を呼び出す場合は問題ありませんが、私の個人的なルールは、クラスが直接所有していないオブジェクトを表示できないことです (つまり、子の子についての知識はありません)。

私は、無関係なクラス間で通信するためのPubSubの大ファンです。オブジェクトとは異なりwx.Event、階層関係は必要ありません。jdi によって提示された参照ソリューションとは異なり、クラスが互いの構造についてまったく知識を持っている必要はありません。

つまり、あなたのアプリケーションでは、インスタンスなしでインスタンスSetModesが存在できるでしょうか? いいえの場合、ロジックを に組み込むことはできますか? はいの場合、明示的に処理するコーディングは悪い設計です。AppSetModesAppSetModesApp

を使用してPubSub、 から要求メッセージを送信しますSetModesAppはメッセージを確認し、応答メッセージを送信できます。これは によって確認されSetModesます。完全に分離し、完全に非同期です。SetModesについて何も知る必要はありませんApp。メッセージ形式だけです。

于 2012-06-29T06:39:02.713 に答える
0

wx.Frame に親が必要だからといって、関連付けられていない別のクラスで wx.Frame への参照を割り当てることができないわけではありません。通常どおり App インスタンスを親にするだけで、参照を SetModes に渡します。

app = App(parent)
setModes = SetModes()
setModes.GetModes = app

これは、プログラムの設計上の問題に帰着します。ウィジェットには親が必要です。

于 2012-06-29T05:36:54.653 に答える