写保护TabularAdapter列

时间:2016-12-16 23:14:06

标签: python enthought

我在Enthought Python中有一个用TabularAdapter显示的表。使用“def get_edit()”,我可以设置任何要保护的行(用户不能更改值),但我找不到写保护列的方法...... 任何人都有任何建议,或者想指出我正确的方向?

1 个答案:

答案 0 :(得分:0)

在联系Enthought支持后,他们想出了以下内容:

可以通过在继承自TabularAdapter的类中定义以下方法来实现此行为:

def get_can_edit_cell(self, object, trait, row, column):
    return self._result_for('get_can_edit', object, trait, row, column)

然后在您的班级中,您可以使用以下内容将各列设置为不可编辑(将col替换为感兴趣的列ID):

col_can_edit = Bool(False)

例如,使用示例here,您可以通过将以下内容添加到ReportAdapter类来使年龄和名称列不可编辑:

age_can_edit = Bool(False)
name_can_edit = Bool(False)

def get_can_edit_cell(self, object, trait, row, column):
    return self._result_for('get_can_edit', object, trait, row, column) 

希望这会有所帮助。如果您遇到任何问题,请告诉我。

  

我修改了他们的示例,所以我可以使用我的numpy数组(ColumnID是一个整数,而不是字符串),如下所示:

class TestArrayAdapter1(TabularAdapter):

columns = [('Int1 #', 0), ('Int2', 1), ('Float3', 2)]

even_bg_color = 0xf4f4f4  # very light gray

width = 200

def get_format(self, object, name, row, column):
    formats = ['%d', '%d', '%.3f']
    return formats[column]

def get_can_edit_cell(self, object, trait, row, column):
    write_protected = [False, True, True]
    return write_protected[column]