Tkinter tk.Listbox 内存泄漏

问题描述 投票:0回答:0

我有一个继承

tk.Listbox
的类来支持存储原始值,但是我似乎有内存泄漏,因为每次我删除列表框中的所有项目时,内存都不会被释放。

有没有我可以更改的参数或其他东西,这样它就不会保留内存?

我自定义的列表框类:

class ListBoxObjects(tk.Listbox):
    def __init__(self, *args, **kwargs):
        self._original_items = []
        super().__init__(*args, **kwargs)
        self.configure(selectmode=tk.EXTENDED)

    def get(self, original = True, *args, **kwargs) -> list:
        if original:
            return self._original_items

        return super().get(*args, **kwargs)

    def insert(self, index: str | int, *elements: str | float) -> None:
        _ret = super().insert(index, *elements)
        self._original_items.extend(elements)
        return _ret

    def delete(self, *indexes: int) -> None:
        if indexes[-1] == "end":
            indexes = range(indexes[0], len(self._original_items))

        indexes = sorted(indexes, reverse=True)
        for index in indexes:
            super().delete(index)
            del self._original_items[index]

    def clear(self) -> None:
        super().delete(0, tk.END)
        self._original_items.clear()

我正在调用清除方法然后插入,内存一直在上升。

填充列表框的代码:

        self.lst_message_log.clear()  # Method in ListBoxObjects
        self.lst_message_log.insert(tk.END, *messages)  # Method in ListBoxObjects

我已经尝试过 StackOverflow,但找不到与此相关的任何内容。

python tkinter memory-leaks tcl tk-toolkit
© www.soinside.com 2019 - 2024. All rights reserved.