Найти - Пользователи
Полная версия: Виджеты
Начало » GUI » Виджеты
1
Ser5+
Доброго времени всем. Такой вопрос. Есть например окно с двумя виджетами. Слева виджет с кнопками типа меню, а справа все меняется при переключении этих кнопок меню. Вопрос такой тыкнули на меню и справа там появилась таблица смотрим данные какие то. Потом после переключения на другое меню и возвращаемся обратно то есть тыкнули и там уже таблица пустая без данных. То есть проблема понятно у меня на каждую кнопку создаются новые виджеты справа и поэтому данные обнуляются,а хотелось бы в некоторых виджетах сохранить данные, то есть не создавать виджет. Нужен минимальный пример,например 2 кнопки типа меню и виджет к каждой кнопке прикрутить. Задача когда тыкнули на одну кнопку появился виджет с данными,ввели какие то данные например в поле ввода. Потом захотели перейти на другой виджет по другой кнопке и при возврате на первую кнопку чтобы данные не стерлись из поля ввода.
Ser5+
Более конкретный пример. Допустим слева кнопка 1 и кнопка 2. Справа центральный виджет где все будет меняться, то есть как бы главная область. Нажали на первую кнопка и справа создается виджет и в нем таблица и прочие виджеты. Загружаю извне например данные в таблицу,поделал что-то. Потом нажали на вторую кнопку и справа создается виджет с формой или что то другое не важно. Затем снова нажал на первую кнопку и хотелось бы чтобы отобразилось то что уже есть то есть таблица с данными,а у меня там создается снова виджет,таблица и приходится снова загружать данные. То есть по логике хотелось бы у первой кнопки создать виджеты справа один раз и при переходе по другим кнопкам этот виджет скрывать или открывать. То есть нужен пример как правильно написать. Pyqt5
Ser5+
Все вопрос решен. Получилось сделать с помощью hide и show. Буду переписывать код и если будут вопросы то отпишусь.
Rodegast
> То есть нужен пример как правильно написать. Pyqt5

Смотри в сторону QStackedWidget
py.user.next
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+
То есть нужен пример как правильно написать.
Да он громоздкий. Если правильно писать, это надо сделать отдельную форму.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB