1

私は wxPython から始めて、手に入れることができるすべてのチュートリアルと例を通して自分の道を歩んできました。ただし、わずかな問題が発生しました。これは、wx.App と wx.Frame に関係しており、特定のメソッドを含める必要があります。私が見たほぼすべての例は、レイアウト/サイザーとイベント処理をはるかに超えていません.wxPythonプロジェクトのプロジェクト編成に実際に取り組んでいるものはありません.

たとえば、フォルダーのリストを取得するメソッドがあります。ほとんどの例でこれに対処する方法は、メソッドをフレーム クラスに固定することです。このメソッドは、アプリケーションの他のいくつかの部分で使用される可能性があるため、アプリケーション クラス レベルで格納する方が理にかなっています。

フレーム クラスがごちゃごちゃしないようにするには、これらのような「ユニバーサル」メソッドをどのように整理して呼び出す必要がありますか。

アップデート:

明確にするために、「フォルダーのリスト」は単なる例であり、私の実際の方法はより多くの作業を行います。私が言っているのは、フレーム固有ではないコードがあるということです。これがアプリケーション クラスにある場合、フレーム内のイベント メソッドからそれを呼び出す最良の方法は何ですか。

プログラミングの基礎ではなく、実際のプロジェクト編成のテクニックを探しています。

4

4 に答える 4

2

As Mark stated you should make a new class that handles things like this.

The ideal layout of code when using something like wxWidgets is the model view controller where the wxFrame class only has the code needed to display items and all the logic and business rules are handled by other class that interact with the wxFrame. This way you can change logic and business rules with out having to change your interface and change (or swap) your interface with out having to change your logic and business rules.

于 2008-12-24T06:39:56.673 に答える
2

私はおそらく最初からずっと明確にすべきでしたが、私が探していたものを見つけました:

http://wiki.wxpython.org/ModelViewController/

wxpython wikiに埋もれて、MVCプロジェクトのいくつかの単純で具体的な例を見つけました。

于 2008-12-28T08:55:34.727 に答える
2

wxWidgets/wxPython データ型から継承するクラスは、ビジネス ロジックを実装しないでください。wxWidgets は GUI ライブラリであるため、wxApp または wxFrame のサブクラスはすべて GUI に重点を置いたままにしておく必要があります。つまり、インターフェイスを表示し、ユーザー アクションに応答します。

何か有用なコードを wx から分離する必要があります。これは、後で Web またはコンソール アプリケーションで使用することを決定でき、そのような場合に wxApp オブジェクトを作成したくないためです。後でいくつかの計算を別の「ワーカー スレッド」に移動することを決定することもできますが、GUI は「メイン スレッド」になり、長時間の計算中に応答し、適切に再描画されます。

最後になりましたが、ロジックをカプセル化するクラスは、プロジェクトの存続期間中に大きくなる傾向があります。それらがGUIクラスと混在している場合、それらはより速く成長し、最終的には非常に複雑になり、ほとんどデバッグできなくなります...

それらを分離すると、ロジックのバグと GUI のバグ (更新/レイアウト/進行状況バーなど) を混在させない場合、クリーンなコードにつながります。このようなアプローチには、もう 1 つの優れた機能があります。GUI 担当者とロジック担当者の間で作業を分割できるため、常に競合することなく作業を行うことができます。

于 2008-12-26T22:01:47.887 に答える
0

適切なOOP設計では、これは独立しているか、ファイルシステムクラスの一部であり、アプリやフレームの一部ではありません。

于 2008-12-24T06:24:15.050 に答える