如何在不生成新单元格的情况下更改ipysheet中单元格的值?

2024-03-29 12:25:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在运行一个Jupyter笔记本,它显示一个简单的字符串到字符串的字典(底部有一个空行,这样用户就可以向字典添加新条目)。我正在使用ipysheet来完成这个任务,我注意到,由于用户多次将不同的字典加载到表中,而没有重新启动内核,Jupyter Notebook的UI线程将减慢并最终崩溃。你知道吗

在做了一些研究之后,我发现每个单独的ipysheet单元都作为一个单独的小部件加载,我认为问题可能是我创建了太多的小部件,并且在字典卸载后没有丢弃它们。我决定尝试修改我的代码,以便它只创建与显示该程序中加载到内存中的单个最大字典所需的单元格数量相同的单元格。你知道吗

不幸的是,我发现一旦一个单元格已经通过编程方式创建,我就无法更改它的值。我试着简单地设置cell_object.value = target_value,因为这似乎是所有其他ipysheet修改的接口,但发现这并没有更新单元格(即使我可以毫无问题地更改sheet_object.rows = new_row_number)-即使新字典应该加载到表中,它们仍然具有原始字典的值。你知道吗

有什么我不知道的吗?用户界面是否没有正确更新?ipysheet中的单元格类型是不可变的吗?你知道吗

def set_sheet_from_dictionary(self, target_dict):
        key_list = list(target_dict.keys())
        key_list.sort()

        key_length = len(target_dict.keys())

        with ipysheet.hold_cells():
            self.sheet1.rows = key_length+1

            for i in range(len(key_list)):
                if len(self.cell_list_a) <= i:
                    # These would probably be better as Column objects? But I'm trying to keep it simple for now
                    self.cell_list_a.append(ipysheet.cell(i, 0, key_list[i], read_only=True))
                    self.cell_list_b.append(ipysheet.cell(i, 1, target_dict[key_list[i]]))
                else:
                    self.cell_list_a[i].value = key_list[i]
                    self.cell_list_b[i].value = target_dict[key_list[i]]
            if len(self.cell_list_c) == 0:
                self.cell_list_c.append(ipysheet.cell(key_length, 0, ""))
                self.cell_list_c.append(ipysheet.cell(key_length, 1, ""))
            else:
                self.cell_list_c[0].value = ""
                self.cell_list_c[0].row = key_length
                self.cell_list_c[1].value = ""
                self.cell_list_c[1].row = key_length

Tags: key字符串selftargetlen字典valuecell