Ser5+
Есть например окно с двумя виджетами. Слева виджет с кнопками типа меню, а справа все меняется при переключении этих кнопок меню. Вопрос такой тыкнули на меню и справа там появилась таблица смотрим данные какие то. Потом после переключения на другое меню и возвращаемся обратно то есть тыкнули и там уже таблица пустая без данных. То есть проблема понятно у меня на каждую кнопку создаются новые виджеты справа и поэтому данные обнуляются,а хотелось бы в некоторых виджетах сохранить данные, то есть не создавать виджет.
Архитектурно нужно разделить одну сущность “виджет” на две сущности “виджет” и “объект с данными для виджета”. При переключении можно очищать содержимое объекта с данными или оставлять содержимое объекта с данными. И при создании виджета объект с данными агрегируется в виджете (это значит, что время жизни виджета и время жизни объекта не совпадают). Так, если виджет уничтожается, то объект с данными продолжает существовать. Если виджет создаётся снова, то к нему привязывается тот же самый объект с данными. Таким образом при некоторых переключениях ты можешь очищать объект с данными, а при некоторых переключениях ты можешь оставлять объект с данными заполненным какими-то данными.
Ser5+
а у меня там создается снова виджет,таблица
Потому что между ними сделано отношение композиции, а не агрегации. При композиции у них время жизни совпадает.
Пример агрегации
>>> class Widget:
... def __init__(self, table):
... self.table = table
...
>>> class Table:
... def __init__(self):
... self.data = 'abc'
...
>>> table = Table()
>>>
>>> widget = Widget(table)
>>> print(widget.table.data)
abc
>>>
>>> del widget
>>>
>>> print(table.data)
abc
>>>
Объект таблицы существует до создания объекта виджет, во время существования объекта виджет и после разрушения объекта виджет.
Пример композиции
>>> class Widget:
... def __init__(self):
... self.table = Table()
...
>>> class Table:
... def __init__(self):
... self.data = 'abc'
...
>>> widget = Widget()
>>> print(widget.table.data)
abc
>>>
>>> del widget
>>>
>>> print(widget.table.data)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'widget' is not defined. Did you mean: 'Widget'?
>>>
Объект таблицы не существует до создания объекта виджет, существует во время существования объекта виджет и не существует после разрушения объекта виджет.
Ser5+
То есть нужен пример как правильно написать.
Да он громоздкий. Если правильно писать, это надо сделать отдельную форму.