【发布时间】:2015-03-29 18:58:41
【问题描述】:
感谢 SO (Warren Weckesser) 上的另一位用户,我找到了一种格式化 TabularAdapter 列的好方法。我还想完成一些其他的定制,所以我想我会把它交给 SO 看看我是否能得到更多帮助。
以下代码以我想要使用的格式列出了几个 TabularAdapter 表。我想做两件事:
我想将第一列设置为不可编辑。我找到了如何将行设置为不可编辑,但不是一列——这可能吗?
如果我的任何列中的值之一发生更改,我真正想要的(甚至超过上面的#1)得到通知!我听说有一些“调整”可以用 numpy 数组来完成,但是我太缺乏经验了,还没有完成这个。是否有任何 TraitsAdapter 方法可用于完成这一壮举?
这是我目前的代码(感谢 Warren 的修改):
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 = ['%d', '%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("%d")
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()
【问题讨论】:
-
快 2 年了,我仍然没有找到将列设置为不可编辑的方法:(
-
关于不可编辑的列,您可能希望发布到新的邮件列表/google 组:“Enthought Tool Suite users”。