添加/更改文字'到组中的项目

时间:2014-09-17 20:27:03

标签: enthought traitsui

我正在使用Enthought的TraitsUI设计一个UI,我无法弄清楚如何完成我想要的工作......

这就是我想要的: 我在视图中有Items(),我想显示为英制或SI单位。我可以根据SI /英文按钮更改“编辑”框中的值,但我无法弄清楚如何更改标签的文本。例如,如果我有一个项目'Length,ft [3.28]'并将其转换为SI,我希望它显示'Length,m [1.00]'。我可以处理3.28-> 1.00转换,但无法弄清楚如何将'ft'更改为'm'。

有什么建议吗?

我尝试过的一件事是定义一个包含单位名称的字符串(比如'm'或'ft')......然后,在项目中,我设置了这样的标签:

label ='Top,'+ lengthUnits

这在首次构建视图时工作正常,但在更改单位控件时不会更新标签。有没有办法强制视图使用所有新值进行更新?

这是一个小py程序,显示我正在尝试做什么(随意批评我的风格:))。我还会尝试添加一些显示会发生什么的图像:

# NOTE: This version of the code has been modified so that it works as I want it to :)

# Example trying to change text on a View...

from traits.api \
    import HasTraits, Enum, CFloat, String

from traitsui.api \
    import View, Group, HGroup, Item, spring

class TestDialog ( HasTraits ):
    length = CFloat(1.0)
    choose_units = Enum('English', 'SI')
    current_units = 'English'
    unit_name = String('ft')
    ft_to_m = CFloat(3.28)
    
    view = View(
        Group(
            HGroup(
                spring,
                Item(name = "length", label = 'Test length'),
                Item(name = 'unit_name', style = 'readonly', show_label = False),
                spring
            ),
            HGroup(
                spring,
                Item(name = "choose_units"),
                spring
            )
        ),
        title = 'Test Changing View Test'
    )

    def _choose_units_changed(self):
        if self.current_units != self.choose_units:
            if self.choose_units == 'SI':
                self.length /= self.ft_to_m
                self.unit_name = 'm'
            else:
                self.length *= self.ft_to_m
                self.unit_name = 'ft'
        self.current_units = self.choose_units
        
# Run the program (if invoked from the command line):
if __name__ == '__main__':
    # Create the dialog:
    TestIt = TestDialog()

    # put the actual dialog up...
    TestIt.configure_traits()

Screen Shot showing my issue

1 个答案:

答案 0 :(得分:1)

使用此处所述的通知:http://code.enthought.com/projects/traits/docs/html/traits_user_manual/notification.html

更新以回应更新的问题:

对,标签不会动态更新。而是创建看起来像标签的文本字段,例如用:

label_text = String('Test length, English:')

然后在您的视图中显示它:

Item("label_text", style='readonly', show_label=False),

您可能还想使用嵌套在(V)组中的HGroup,将其放置在“长度”显示的左侧。

然后修改监听器中的label_text。