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