1

PythonとPyObjCを使用して簡単なOSXアプリを書いています。Interface Builderを使用して設定ダイアログを設計し、ibtoolを使用してコンパイルしてから、Pythonからロードします。問題は、Pythonコードからこのウィンドウにあるコントロールにアクセスする方法です。私は少し前にiPhoneの開発をいじってみましたが、インターフェイスビルダーのUIコントロールに接続されるコントローラークラスにIBOutletが必要であることを覚えています。Pythonでは次のようになります。

class MyClass(NSObject):
  my_outlet = objc.IBOutlet('my_outlet')

しかし、私はXCodeで作業していないので(私が持っているのは.pyファイルと.xibファイルだけです)、InterfaceBuilderは私のアウトレットについて知りません。この場合、どうすればバインディングを実行できますか?または、コードからUI要素に他にどのようにアクセスできますか?

4

2 に答える 2

4

まず、Xcodeの使用は、NIBのロードとは何の関係もありません(より便利にするだけではありません)。

Oleが言ったように、IBを使用して、ファイルの所有者に必要なアウトレットを手動で追加したり、NIBファイルにあるカスタムオブジェクトインスタンスに追加したりできます。そうすることで、それはすべて「正しく機能する」でしょう。

しかし、この声明は私の比較的類似した答えを促したものです:

私が持っているのは.pyファイルと.xibファイルだけです

.appラッパーの外部にUIコードを少し書き込もうとしていますか?もしそうなら、それは完全にサポートされていないパターンであり、正しくするのは非常に難しく、ソフトウェアのアップデートやメジャーリリースにまたがる可能性が非常に高いです(過去に何度もありました)。

問題を解決する最良の方法は、Xcodeプロジェクトを使用して標準アプリケーションを構築することです。テンプレートは、開発ツールに付属しなくなりました。別々にダウンロードするだけです。

コマンドラインから実行する必要がある場合でも、実行できます。

于 2009-12-11T16:42:35.770 に答える
1

私はこれを試していませんが、IB で直接アウトレットを定義することもできます。ライブラリ パネルを開き、上部のセグメント化されたコントロールで [クラス] を選択し、アウトレットを定義するカスタム クラスを選択します。MyWindow という NSWindow サブクラスがあるとします。リストで NSWindow クラスを選択し、左下のアクション ボタンをクリックして、[新しいサブクラス...] を選択し、MyWindow という名前を付けます。Outlets タブに切り替えて、ウィンドウ用の NSButton アウトレットを作成します。次に、ボタンをコンセントに接続します。

これが PyObjC にどのように転送されるかはわかりませんが、試したときに結果を確認したいと思います。

于 2009-12-11T11:28:08.107 に答える