1. 2005-08-02 wx之ddx/ddv?

  • 请教一下:
    • wxPython 里有没有类似MFC中ddx/ddv的功能,Validate有点类似,但好像只能限制控件的输入,不能在控件和关联值之间像MFC那样用UpdateData()进行更新。 -- flyaflya

  • 不清楚ddx/ddv是什么功能,没有用过。 -- limodou
  • 就是值和控件间的影射,比如把int age;影射到一个edit控件上,每次调用UpdateData(True),值age就变为edit控件上的输入值,调用UpdateData(False)就把age的值显示在edit控件上,其它类型的控件(如ListCtrlCombCtrl...)也可以这样影射。这样的好处是:每次对话框初始化时只用调用一次UpdateData(False)就可以使对话框上的所有控件显示默认值,而在ON_OK时,只用调用一次UpdateData(True),就可以控件显示的值更新到所影射的值了,很方便。好像wxpython是没有这种功能吧? -- flyaflya

  • 不知道MFC中是否是自动支持呢?在wxPython中有些控件是有值的,如IntCtrl, TextCtrl, CheckBox之类分别对应int, string, bool,它们可以使用SetValue()和GetValue()来设置和取得。现在EasyWizard就是想简单化值的输入,做这种对应的处理,关于对应关系已经在上面的说明中有了。你所说的值与控件在wxPython是不能直接绑定,我想MFC也是通过一定的语法来实现的。其实UpdateData(True)在wxPython就是执行相应的:var=control.GetValue()而已。当然还有一些细节问题。与MFC不太一样。 -- limodou

  • 是我没说清楚,在MFC中,UpdateData是Dialog中的函数,不是控件,调用一次Dialog.UpdateData(False),它上面的所有控件都进行一次更新,而不用对每个控件分别调用SetValue()。这种设计模式是obsever模式:)。ddx/ddv在MFC中是极常用的功能,不过在python中用list不难实现吧。 -- flyaflya

  • 是的不难实现。只不过现在没有类似DDX/DDV这种机制。EasyWizard基本上就是做这种绑定,不过没有考虑到动态刷新的问题。因为它考虑的是为了简单,因此上用户可控制的并不多。快速是第一位的,如果想做复杂的需要单独做。 -- limodou