37.6. FrameWork —インタラクティブなアプリケーションフレームワーク—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/framework
移動先:案内検索

37.6。 フレームワーク —インタラクティブなアプリケーションフレームワーク

FrameWork モジュールには、インタラクティブなMacintoshアプリケーションのフレームワークを一緒に提供するクラスが含まれています。 プログラマーは、基本クラスのさまざまなメソッドをオーバーライドするサブクラスを作成してアプリケーションを構築し、それによって必要な機能を実装します。 機能のオーバーライドは、多くの場合、さまざまな異なるレベルで実行できます。 単一のダイアログウィンドウでのクリックを非標準的な方法で処理するために、完全なイベント処理をオーバーライドする必要はありません。

ノート

このモジュールはPython3.xで削除されました。


FrameWork での作業はほぼ停止しました。PyObjCがPythonからの完全なCocoaアクセスに使用できるようになり、ドキュメントでは最も重要な機能のみが説明されており、最も論理的な方法では説明されていません。それ。 詳細については、ソースまたは例を調べてください。 以下は、 Framework の長所と制限についてMacPythonニュースグループに投稿されたコメントです。

FrameWork の長所は、さまざまな場所で制御フローに侵入できることです。 たとえば、 W は、メニューを有効/無効にするために別の方法を使用し、残りをそのままにしておくことにプラグインします。 Framework の弱点は、抽象的なコマンドインターフェイスがないこと(ただし、難しいことではないはずです)、ダイアログのサポートが最小限である、コントロール/ツールバーのサポートが存在しないことです。


FrameWork モジュールは、次の関数を定義します。

FrameWork.Application()
完全なアプリケーションを表すオブジェクト。 メソッドの説明については、以下を参照してください。 デフォルトの__init__()ルーチンは、空のウィンドウ辞書とアップルメニューのメニューバーを作成します。
FrameWork.MenuBar()
メニューバーを表すオブジェクト。 このオブジェクトは通常、ユーザーが作成するものではありません。
FrameWork.Menu(bar, title[, after])
メニューを表すオブジェクト。 作成時に、メニューが表示されるMenuBartitle 文字列、およびメニューが表示されるの後の位置(1ベース)を渡します(デフォルト:終わり)。
FrameWork.MenuItem(menu, title[, shortcut, callback])

メニュー項目オブジェクトを作成します。 引数は、作成するメニュー、アイテムのタイトル文字列、オプションでキーボードショートカットとコールバックルーチンです。 コールバックは、引数menu-id、メニュー内のアイテム番号(1ベース)、現在のフロントウィンドウ、およびイベントレコードを使用して呼び出されます。

呼び出し可能なオブジェクトの代わりに、コールバックを文字列にすることもできます。 この場合、メニューを選択すると、最上部のウィンドウとアプリケーションでメソッドが検索されます。 メソッド名は、'domenu_'が前に付いたコールバック文字列です。

MenuBar fixmenudimstate()メソッドを呼び出すと、現在のフロントウィンドウに基づいてすべてのメニュー項目に正しい調光が設定されます。

FrameWork.Separator(menu)
メニューの最後に区切り文字を追加します。
FrameWork.SubMenu(menu, label)
メニュー menu の下に label という名前のサブメニューを作成します。 メニューオブジェクトが返されます。
FrameWork.Window(parent)
(モードレス)ウィンドウを作成します。 Parent は、ウィンドウが属するアプリケーションオブジェクトです。 ウィンドウは後で表示されるまで表示されません。
FrameWork.DialogWindow(parent)
モードレスダイアログウィンドウを作成します。
FrameWork.windowbounds(width, height)
指定された幅と高さのウィンドウの作成に適した(left, top, right, bottom)タプルを返します。 ウィンドウは前のウィンドウに対してずらされ、ウィンドウ全体を画面に表示したままにしようとします。 ただし、ウィンドウは常に指定された正確なサイズになるため、パーツが画面外に表示される場合があります。
FrameWork.setwatchcursor()
マウスカーソルを時計に設定します。
FrameWork.setarrowcursor()
マウスカーソルを矢印に設定します。

37.6.1。 アプリケーションオブジェクト

アプリケーションオブジェクトには、特に次のメソッドがあります。

Application.makeusermenus()
アプリケーションにメニューが必要な場合は、このメソッドをオーバーライドしてください。 メニューを属性menubarに追加します。
Application.getabouttext()
このメソッドをオーバーライドして、アプリケーションを説明するテキスト文字列を返します。 または、do_about()メソッドをオーバーライドして、より複雑な「about」メッセージを表示します。
Application.mainloop([mask[, wait]])

このルーチンはメインイベントループです。これを呼び出して、アプリケーションのローリングを設定します。 Mask は処理するイベントのマスクであり、 wait は他の並行アプリケーションに残したいティック数です(デフォルトは0であり、おそらくお勧めできません)。 self を上げてメインループを終了することは引き続きサポートされていますが、お勧めしません。代わりにself._quit()を呼び出してください。

イベントループは多くの小さな部分に分割されており、それぞれをオーバーライドできます。 デフォルトのメソッドは、ウィンドウとダイアログへのイベントのディスパッチ、ドラッグとサイズ変更の処理、Appleイベント、FrameWork以外のウィンドウのイベントなどを処理します。

一般に、すべてのイベントハンドラーは、イベントが完全に処理された場合は1を返し、それ以外の場合は0を返す必要があります(たとえば、フロントウィンドウがFrameWorkウィンドウではなかったため)。 これは、更新イベントなどをSiouxコンソールウィンドウなどの他のウィンドウに渡すことができるようにするために必要です。 MacOS.HandleEvent()の呼び出しは、 our_dispatch またはその呼び出し先内では許可されていません。これは、コードがPython内部ループイベントハンドラーを介して呼び出された場合、無限ループが発生する可能性があるためです。

Application.asyncevents(onoff)

ゼロ以外のパラメーターを指定してこのメソッドを呼び出し、非同期イベント処理を有効にします。 これにより、イベントが使用可能な場合は常に、アプリケーションイベントハンドラー async_dispatch を呼び出すように内部インタープリターループに指示されます。 これにより、FrameWorkウィンドウの更新とユーザーインターフェイスが長時間の計算中に機能し続けるようになりますが、インタープリターの速度が低下し、再入可能でないコード(FrameWork自体など)で驚くべき結果が生じる可能性があります。 デフォルトでは、 async_dispatch はすぐに our_dispatch を呼び出しますが、これをオーバーライドして、特定のイベントのみを非同期で処理することができます。 処理しないイベントはスーなどに渡されます。

古いオン/オフ値が返されます。

Application._quit()
次の都合の良いときに、実行中の mainloop()呼び出しを終了します。
Application.do_char(c, event)
ユーザーが入力した文字 c 。 イベントの完全な詳細は、 event 構造体にあります。 このメソッドは、Windowオブジェクトで提供することもできます。これは、ウィンドウが最前面にある場合にアプリケーション全体のハンドラーをオーバーライドします。
Application.do_dialogevent(event)
モードレスダイアログイベントを処理するために、イベントループの早い段階で呼び出されます。 デフォルトのメソッドは、(関連するDialogWindowオブジェクトを介さずに)関連するダイアログにイベントをディスパッチするだけです。 ダイアログイベント(キーボードショートカットなど)の特別な処理が必要な場合はオーバーライドします。
Application.idle(event)
使用可能なイベントがない場合、メインイベントループによって呼び出されます。 nullイベントが渡されます(マウスの位置などを確認できます)。


37.6.2。 ウィンドウオブジェクト

ウィンドウオブジェクトには、特に次のメソッドがあります。

Window.open()
このメソッドをオーバーライドしてウィンドウを開きます。 MacOSのwindow-idをself.widに保存し、do_postopen()メソッドを呼び出して、ウィンドウを親アプリケーションに登録します。
Window.close()
このメソッドをオーバーライドして、ウィンドウを閉じるときに特別な処理を実行します。 do_postclose()メソッドを呼び出して、親の状態をクリーンアップします。
Window.do_postresize(width, height, macoswindowid)
ウィンドウのサイズが変更された後に呼び出されます。 InvalRectを呼び出すよりも多くのことを行う必要がある場合は、オーバーライドします。
Window.do_contentclick(local, modifiers, event)
ユーザーがウィンドウのコンテンツ部分をクリックしました。 引数は、座標(ウィンドウ相対)、キー修飾子、および生のイベントです。
Window.do_update(macoswindowid, event)
ウィンドウの更新イベントを受信しました。 ウィンドウを再描画します。
Window.do_activate(activate, event)
ウィンドウがアクティブ化(activate == 1)または非アクティブ化(activate == 0)されました。 フォーカスの強調表示などを処理します。


37.6.3。 ControlsWindowオブジェクト

ControlsWindowオブジェクトには、Windowオブジェクトのメソッドの他に、次のメソッドがあります。

ControlsWindow.do_controlhit(window, control, pcode, event)
コントロールコントロールのパーツ pcode がユーザーによってヒットされました。 追跡などはすでに処理されています。


37.6.4。 ScrolledWindowオブジェクト

ScrolledWindowオブジェクトは、次の追加メソッドを備えたControlsWindowオブジェクトです。

ScrolledWindow.scrollbars([wantx[, wanty]])
水平および垂直スクロールバーを作成(または破棄)します。 引数はどちらを使用するかを指定します(デフォルト:両方)。 スクロールバーには常に最小0と最大32767があります。
ScrolledWindow.getscrollbarvalues()
このメソッドを指定する必要があります。 スクロールバーの現在の位置(032767の間)を示すタプル(x, y)を返す必要があります。 どちらの場合もNoneを返すと、ドキュメント全体がその方向に表示されていることを示すことができます。
ScrolledWindow.updatescrollbars()
ドキュメントが変更されたときにこのメソッドを呼び出します。 getscrollbarvalues()を呼び出し、スクロールバーを更新します。
ScrolledWindow.scrollbar_callback(which, what, value)
あなたによって提供され、ユーザーの操作の後に呼び出されます。 どの'x'または'y'になり、'-''--'、 [になりますX95X]、'++'または'+''set'の場合、 value には新しいスクロールバーの位置が含まれます。
ScrolledWindow.scalebarvalues(absmin, absmax, curmin, curmax)
getscrollbarvalues()から返す値を計算するのに役立つ補助メソッド。 ドキュメントの最小値と最大値、および最上部(左端)と最下部(右端)の表示値を渡すと、正しい数値またはNoneが返されます。
ScrolledWindow.do_activate(onoff, event)
ウィンドウが最前面になったら、スクロールバーの調光/ハイライトを処理します。 このメソッドをオーバーライドする場合は、メソッドの最後でこれを呼び出します。
ScrolledWindow.do_postresize(width, height, window)
スクロールバーを正しい位置に移動します。 オーバーライドする場合は、最初にこのメソッドを呼び出します。
ScrolledWindow.do_controlhit(window, control, pcode, event)
スクロールバーの相互作用を処理します。 最初にこのメソッドを呼び出してオーバーライドすると、ゼロ以外の戻り値は、ヒットがスクロールバーにあり、処理されたことを示します。


37.6.5。 DialogWindowオブジェクト

DialogWindowオブジェクトには、Windowオブジェクトのメソッドの他に、次のメソッドがあります。

DialogWindow.open(resid)
ID resid のDLOGリソースからダイアログウィンドウを作成します。 ダイアログオブジェクトはself.widに保存されます。
DialogWindow.do_itemhit(item, event)
アイテム番号アイテムがヒットしました。 トグルボタンなどを再描画するのはあなたの責任です。