CustomTkinter
CustomTkinter copied to clipboard
CTkTabview Memory Issue
When using .delete("Tab Name") the CTkFrame that is created during .add("Tab Name") isn't being destroyed, resulting in increased memory usage.
Changing line 333 in ctk_tabview.py to
self._tab_dict[name].destroy()
Seems to help and removes the frame created but there is still memory not being released.
A small example
import customtkinter
class App(customtkinter.CTk):
def __init__(self):
super().__init__()
self.tab_name = 0
self.tabview = customtkinter.CTkTabview(self)
self.tabview.grid()
self.tabview.add("Add Tab")
self.add_button = customtkinter.CTkButton(self.tabview.tab("Add Tab"), text="Add", width=100, command= self.add_tab)
self.add_button.grid()
def add_tab(self):
self.tabview.add(self.tab_name)
self.del_button = customtkinter.CTkButton(self.tabview.tab(self.tab_name), text="Del", width=100, command= self.del_tab)
self.del_button.grid(row=1)
self.tabview.set(self.tab_name)
self.tab_name += 1
def del_tab(self):
self.current_tab = self.tabview.get()
self.tabview.delete(self.current_tab)
print(str(self.tabview.winfo_children()))
if __name__ == "__main__":
app = App()
app.mainloop()
How did you measure? How big is the memory leak? What operating system, versions of Python and CustomTkinter did you use?
Windows 10: Build19045 Python: 3.10.7 CustomTkinter: 5.1.2
Well the leak depends on what is stored in each tab. On the example I posted it's not that noticeable as each tab only has a button. *See Note
The above example was to demonstrate that the frames being created by .add() aren't being destroyed with .delete() which can cause slowdown and increased memory usage.
Line# 333 in ctk_tabview.py needs to be changed to self._tab_dict[name].destroy() as I have put in my PR #1083
*Unless you add a ridiculous number of tabs. Made a loop to add and delete 1000 tabs. Without the change to line#333 the program uses 73.1MB with the change it only uses 29.1MB