0

私はチュートリアル「TraitsUI http://code.enthought.com/projects/traits/docs/html/tutorials/traits_ui_scientific_app.html を使用して科学的プログラミング用のグラフィカル アプリケーションを作成する」に従い、次のコード スニペットをテストしました。

from enthought.traits.api import *
from enthought.traits.ui.api import *

class Camera(HasTraits):
    """ Camera object """

    gain = Enum(1, 2, 3,
        desc="the gain index of the camera",
        label="gain", )

    exposure = CInt(10,
        desc="the exposure time, in ms",
        label="Exposure", )

    def capture(self):
        """ Captures an image on the camera and returns it """
        print "capturing an image at %i ms exposure, gain: %i" % (
            self.exposure, self.gain )

if __name__ == "__main__":
    camera = Camera()
    camera.configure_traits()
    camera.capture()

コマンドラインでこれを実行すると、宣伝どおりに機能します。GUI がポップアップします。パラメータを調整し、[OK] をクリックすると、変更された値が返されます。しかし、実行ボタンをクリックして Canopy エディター内から同じコードを実行すると、デフォルトのパラメーターがすぐに出力されます。その後、ウィンドウがポップアップします。GUI でパラメーターを調整して [OK] をクリックすると、GUI は終了しますが、新しいパラメーター値は出力されません。

どういうわけか camera.capture() が camera.configure_traits の前に実行されているようです。

4

1 に答える 1

1

まず、この新しいバージョンのチュートリアルを使用することをお勧めします: http://docs.enthought.com/traitsui/tutorials/traits_ui_scientific_app.html

TraitsUI バージョン 3 の参考資料にリンクしたものですが、上記のものはおそらく使用しているバージョン (バージョン 4) のものです。新しいチュートリアルでは、例traitsui.apiの代わりに新しいモジュール名を使用していますenthought.traits.ui.api

Canopy がすぐに値を表示する理由については、これはプログラムの実行時に予想される動作です。

if __name__ == "__main__":
    camera = Camera()
    camera.configure_traits()
    camera.capture()

as として実行すると__main__(つまり、別のスクリプトによってモジュールとしてインポートされない場合)、スクリプトは次の 3 つのことを順番に実行します: Camera() のインスタンスを作成し、GUI をポップアップし (configure_traits)、capture現在の値 (デフォルトでは「1」と「10」)。

[OK]/[キャンセル] ボタンは、これらの値の設定にフックされていません。テストとして、露出またはゲインを変更してみてください。ただし、ボタンをクリックする代わりに、GUI がまだ開いているときに、Canopy の IPython プロンプト内からこれらの属性を調べてみてください。camera.gainまたはcamera.exposure、新しく設定された値を返す必要があります。

于 2013-11-26T23:40:21.080 に答える