Python 2.7 使用EnThound Canopy时出现配置_特征问题

Python 2.7 使用EnThound Canopy时出现配置_特征问题,python-2.7,enthought,traits,canopy,traitsui,Python 2.7,Enthought,Traits,Canopy,Traitsui,我在学习教程“使用TraitsUI为科学编程编写图形应用程序” 并测试了以下代码段: 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", lab

我在学习教程“使用TraitsUI为科学编程编写图形应用程序” 并测试了以下代码段:

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。您可以调整参数,然后单击“确定”“它返回修改后的值。但是,当我通过单击run按钮在Canopy编辑器中运行相同的代码时,默认参数会立即打印出来;然后窗户弹出。然后,当您调整GUI中的参数并单击“确定”时,GUI将退出,但不会打印新的参数值


就好像camera.capture()在camera.configure_traits之前运行一样。

首先,我建议使用本教程的新版本:

您链接到TraitsUI版本3的参考资料,而上面的是您可能使用的版本(版本4)。例如,较新的教程使用较新的模块名,
traitsui.api
,而不是
enthund.traits.ui.api

至于为什么Canopy会立即显示这些值,这是运行程序时的预期行为:

if __name__ == "__main__":
    camera = Camera()
    camera.configure_traits()
    camera.capture()
当以
\uuuuu main\uuuuuuu
运行时(即,不是由另一个脚本作为模块导入),脚本按顺序执行以下三项操作:创建Camera()的实例,弹出GUI(配置特征),然后执行打印当前值(默认为“1”和“10”)的
捕获
方法

确定/取消按钮未连接到设置这些值中。作为测试,尝试更改曝光或增益,但不要单击按钮,而是在GUI仍然打开的情况下,尝试从Corpody的IPython提示符中检查这些属性:
camera.gain
camera.exposure
应返回新设置的值