我正在使用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()
答案 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。