TabularAdapter 列的不同格式?
different formats for TabularAdapter columns?
我发现我可以通过将如下语句添加到 TabularAdapter 声明来将格式应用于 TabularAdapter 中的所有列:format = '%7.4f'。
但是,我希望 table 中的每一列都有不同的格式...这可能吗?我试图仅指定列索引 2 的格式(如下例所示),但它并不只适用于该列。我一直在寻找如何正确执行此操作,但到目前为止一无所获。
这是一个小示例文件:
from traits.api import HasTraits, Array
from traitsui.api import View, Group,Item, TabularEditor
from traitsui.tabular_adapter import TabularAdapter
from numpy import dtype
test_dtype = dtype([('Integer#1', 'int'), ('Integer#2', 'int'), ('Float', 'float')])
class testArrayAdapter(TabularAdapter):
columns = [('Col1 #', 0), ('Col2', 1), ('Col3', 2)]
even_bg_color = 0xf4f4f4 # very light gray
width = 125
class test(HasTraits):
test_array = Array(dtype=test_dtype)
view = View(
Item(name = 'test_array',
show_label = False,
editor = TabularEditor(adapter = testArrayAdapter()),
),
Item(name = 'test_array',
show_label = False,
editor = TabularEditor(adapter = testArrayAdapter(column=2, format='%.4f')),
),
)
Test = test()
Test.test_array.resize(5, refcheck = False)
Test.configure_traits()
我希望看到的是让第 3 列有 4 个小数(毕竟它是一个浮点数),而第 1 列和第 2 列仅显示为整数。
至少有两种方法可以做到这一点。一种是覆盖适配器 class 中 TabularAdapter
的方法 get_format(self, object, name, row, column)
,并根据 column
参数使其 return 具有适当的格式。例如
def get_format(self, object, name, row, column):
formats = ['%d', '%d', '%.4f']
return formats[column]
另一种方法是使用在TabularAdapter
class中实现的"traits magic"。在您的 subclass 中,您可以通过定义一个特别命名的 Str
特征来设置列的格式。一组适用于 numpy 结构化数组的名称,例如您的 test_array
是
object_0_format = Str("%d")
object_1_format = Str("%d")
object_2_format = Str("%.4f")
(有关详细信息,请参阅 github 存储库中的 TabularAdapter
documentation, and this file。)
这是您的脚本的修改版本,演示了这两种方法。为了多样化,我在第一列中使用了 "%04d"
格式。 (我希望你不介意无故更改名称和样式。)
from traits.api import HasTraits, Array, Str
from traitsui.api import View, Item, TabularEditor
from traitsui.tabular_adapter import TabularAdapter
from numpy import dtype
test_dtype = dtype([('Integer#1', 'int'),
('Integer#2', 'int'),
('Float', 'float')])
class TestArrayAdapter1(TabularAdapter):
columns = [('Col1 #', 0), ('Col2', 1), ('Col3', 2)]
even_bg_color = 0xf4f4f4 # very light gray
width = 125
def get_format(self, object, name, row, column):
formats = ['%04d', '%d', '%.4f']
return formats[column]
class TestArrayAdapter2(TabularAdapter):
columns = [('Col1 #', 0), ('Col2', 1), ('Col3', 2)]
even_bg_color = 0xf4f4f4 # very light gray
width = 125
object_0_format = Str("%04d")
object_1_format = Str("%d")
object_2_format = Str("%.4f")
class Test(HasTraits):
test_array = Array(dtype=test_dtype)
view = \
View(
Item(name='test_array', show_label=False,
editor=TabularEditor(adapter=TestArrayAdapter1())),
Item(name='test_array', show_label=False,
editor=TabularEditor(adapter=TestArrayAdapter2())),
)
test = Test()
test.test_array.resize(5, refcheck=False)
test.configure_traits()
我发现我可以通过将如下语句添加到 TabularAdapter 声明来将格式应用于 TabularAdapter 中的所有列:format = '%7.4f'。
但是,我希望 table 中的每一列都有不同的格式...这可能吗?我试图仅指定列索引 2 的格式(如下例所示),但它并不只适用于该列。我一直在寻找如何正确执行此操作,但到目前为止一无所获。
这是一个小示例文件:
from traits.api import HasTraits, Array
from traitsui.api import View, Group,Item, TabularEditor
from traitsui.tabular_adapter import TabularAdapter
from numpy import dtype
test_dtype = dtype([('Integer#1', 'int'), ('Integer#2', 'int'), ('Float', 'float')])
class testArrayAdapter(TabularAdapter):
columns = [('Col1 #', 0), ('Col2', 1), ('Col3', 2)]
even_bg_color = 0xf4f4f4 # very light gray
width = 125
class test(HasTraits):
test_array = Array(dtype=test_dtype)
view = View(
Item(name = 'test_array',
show_label = False,
editor = TabularEditor(adapter = testArrayAdapter()),
),
Item(name = 'test_array',
show_label = False,
editor = TabularEditor(adapter = testArrayAdapter(column=2, format='%.4f')),
),
)
Test = test()
Test.test_array.resize(5, refcheck = False)
Test.configure_traits()
我希望看到的是让第 3 列有 4 个小数(毕竟它是一个浮点数),而第 1 列和第 2 列仅显示为整数。
至少有两种方法可以做到这一点。一种是覆盖适配器 class 中 TabularAdapter
的方法 get_format(self, object, name, row, column)
,并根据 column
参数使其 return 具有适当的格式。例如
def get_format(self, object, name, row, column):
formats = ['%d', '%d', '%.4f']
return formats[column]
另一种方法是使用在TabularAdapter
class中实现的"traits magic"。在您的 subclass 中,您可以通过定义一个特别命名的 Str
特征来设置列的格式。一组适用于 numpy 结构化数组的名称,例如您的 test_array
是
object_0_format = Str("%d")
object_1_format = Str("%d")
object_2_format = Str("%.4f")
(有关详细信息,请参阅 github 存储库中的 TabularAdapter
documentation, and this file。)
这是您的脚本的修改版本,演示了这两种方法。为了多样化,我在第一列中使用了 "%04d"
格式。 (我希望你不介意无故更改名称和样式。)
from traits.api import HasTraits, Array, Str
from traitsui.api import View, Item, TabularEditor
from traitsui.tabular_adapter import TabularAdapter
from numpy import dtype
test_dtype = dtype([('Integer#1', 'int'),
('Integer#2', 'int'),
('Float', 'float')])
class TestArrayAdapter1(TabularAdapter):
columns = [('Col1 #', 0), ('Col2', 1), ('Col3', 2)]
even_bg_color = 0xf4f4f4 # very light gray
width = 125
def get_format(self, object, name, row, column):
formats = ['%04d', '%d', '%.4f']
return formats[column]
class TestArrayAdapter2(TabularAdapter):
columns = [('Col1 #', 0), ('Col2', 1), ('Col3', 2)]
even_bg_color = 0xf4f4f4 # very light gray
width = 125
object_0_format = Str("%04d")
object_1_format = Str("%d")
object_2_format = Str("%.4f")
class Test(HasTraits):
test_array = Array(dtype=test_dtype)
view = \
View(
Item(name='test_array', show_label=False,
editor=TabularEditor(adapter=TestArrayAdapter1())),
Item(name='test_array', show_label=False,
editor=TabularEditor(adapter=TestArrayAdapter2())),
)
test = Test()
test.test_array.resize(5, refcheck=False)
test.configure_traits()