Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
2 / 2 / 0
Регистрация: 24.03.2020
Сообщений: 16
PyQt5

Singleton

23.06.2020, 22:21. Показов 1773. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Столкнулся со следующей проблемой. Есть QTabWidget. В нём есть несколько вкладок. В каждой вкладке один виджет должен повторяться. Это составной виджет, состоящий из кнопки и таблицы. Проблема в том, что виджет должен быть одинаковым везде. То есть в одной из вкладок его заполнили, а в других он должен отображаться с таким же содержанием. Я пришел к выводу, что необходим паттерн Singleton. Я его применил, однако виджет отрисовывается только в одной вкладке, в других наблюдается пустота. Помогите, пожалуйста, решить данную проблему.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.06.2020, 22:21
Ответы с готовыми решениями:

Создание "Singleton" так, чтобы при повторной инициализации нельзя было измениять атрибуты объекта
Всем привет, для одной задачи потребовался singleton, но такой, чтобы не просто второго объекта не было, но и что бы при повторной...

Collections: singleton/singletonList/singletonMap. Что значит слово singleton?
Заметил, что в классе Collections (утилитный класс) имеются методы для оборачивания элемента в set/list/map Все эти методы содержат в...

Syntax error: Operator expected, Singleton variables: [RverseList,ReverseList], Singleton variables: [L,N1]
p3(X/ ). p3(X, ) :- p3(X, Tail). reverse(List, ReverseList):- reverse(List, , ReverseList). reverse(, Buffer, Buffer):-!. ...

10
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,654
25.06.2020, 14:16
При переключении закладок убирать этот виджет из текущей закладки и добавлять на вновь выбранную
1
2 / 2 / 0
Регистрация: 24.03.2020
Сообщений: 16
25.06.2020, 14:47  [ТС]
kapbepucm, хм, да, скорее всего такое сработает. Это не сильно увеличит время переключения? Ведь надо делать два дополнительных действия каждый раз - убрать и добавить.
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,654
25.06.2020, 15:04
Цитата Сообщение от DeusOfLearning Посмотреть сообщение
Это не сильно увеличит время переключения?
Зависит от "нагруженности" вашего составного виджета.

Ещё вариант, размещать этот виджет отдельно от QTabWidget (за его пределами). Но это не поможет, если он должен быть гдето в центре.
1
2 / 2 / 0
Регистрация: 24.03.2020
Сообщений: 16
25.06.2020, 19:26  [ТС]
kapbepucm, благодарю за ответ. Он состоит их трёх элементов, один из который QTableWidget. Думаю, это не самый оптимальный вариант. А Вы можете пояснить почему так происходит? С точки зрения реализации получается, что виджет добавляется одновременно в две вкладки. И получается, что отрисовывается он только для одной вкладки, для другой просто забивает по какой-то причине.
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,654
26.06.2020, 09:18
Цитата Сообщение от DeusOfLearning Посмотреть сообщение
С точки зрения реализации получается, что виджет добавляется одновременно в две вкладки. И получается, что отрисовывается он только для одной вкладки, для другой просто забивает по какой-то причине.
Ну почему же? По сути, каждая страничка- это отдельный QWidget. И добавляете новый элемент не на все QWidget-ы, а на определённый.
0
2 / 2 / 0
Регистрация: 24.03.2020
Сообщений: 16
26.06.2020, 13:29  [ТС]
kapbepucm, нет, Ваша реализация понятна, я имел в виду, проблему, которую я описал в начале, почему так происходит, что отображается только в одной вкладке (в которую виджет был вставлен в последний раз), а в других нет. Я так понял, что один и тот же виджет может только один раз встречаться в виде дочернего элемента для другого виджета.
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,654
26.06.2020, 14:02
емм... я описывал не свою реализацию, а устройство любого QTabWidget
вкладки-контейнеры не связаны друг с ругом- это разные экземпляры QWidget

Цитата Сообщение от DeusOfLearning Посмотреть сообщение
С точки зрения реализации получается, что виджет добавляется одновременно в две вкладки.
это утверждение неверно
0
2 / 2 / 0
Регистрация: 24.03.2020
Сообщений: 16
26.06.2020, 16:06  [ТС]
kapbepucm,
Цитата Сообщение от kapbepucm Посмотреть сообщение
вкладки-контейнеры не связаны друг с ругом- это разные экземпляры QWidget
Это очевидно, только я не об этом, Вы просто предлагаете перебрасывать один и тот же виджет в разные вкладки. И поясните, пожалуйста, что Вы имеете в виду под реализацией в данном случае? Только лишь то, что вкладки не связаны?

Цитата Сообщение от kapbepucm Посмотреть сообщение
это утверждение неверно
Что именно неверно? И почему? Если Вы про то, что они добавляются, то да, по факту этого не происходит, так выглядит ситуация в коде, но в действительности этого не происходит, виджет находится только в одной вкладке.

Также добавлю, что нашел другое решение. Не очень эффективное по памяти, но по скорости лучше. Я сделал Singleton не сам виджет, а конкретно модель данных (определил наследника для QAbstractTableModel) для QTableView. Идея не моя, нашел в инете. Если кто-то столкнется с подобной проблемой, может, поможет.
0
 Аватар для kapbepucm
1566 / 739 / 321
Регистрация: 02.05.2020
Сообщений: 1,654
26.06.2020, 21:07
Лучший ответ Сообщение было отмечено DeusOfLearning как решение

Решение

А если этот виджет вообще не связывать с QTabWiget, скажем, отображать всегда поверх него? В том месте (в контейнерах-вкладках), где он должен был бы находится поместить какой нибудь пустой QWidget и синхронизировать их геометрию, например, при изменении рамеров главного окна.
Цитата Сообщение от DeusOfLearning Посмотреть сообщение
Что именно неверно? И почему?
это IMHO, прошу сильно не пинать за него
1
2 / 2 / 0
Регистрация: 24.03.2020
Сообщений: 16
26.06.2020, 21:40  [ТС]
kapbepucm,
Цитата Сообщение от kapbepucm Посмотреть сообщение
это IMHO, прошу сильно не пинать за него
Даже не собирался

Цитата Сообщение от kapbepucm Посмотреть сообщение
А если этот виджет вообще не связывать с QTabWiget, скажем, отображать всегда поверх него?
Да, думаю, можно, с точки зрения оптимизации, Ваш вариант будет самым лучшим - по времени и по памяти. Но боюсь, что всё несколько сложнее - мне, наверное, стоило подробнее описать. Ещё раз - есть QTabWidget, соответственно, у него есть вкладки. В каждой вкладки (я сегодня немного поменял логику) есть теперь ещё один QTabWidget. А вот одна из вкладок последнего содержит в себе этот виджет, который как раз и повторяется во вкладках первого QTabWidget. Да, Вашу идею можно реализовать, но в таком случае выглядеть это будет немного страшновато - придется подключать лишний слот для скрытия/показа это виджета и ещё придется вероятно что-то делать. Боюсь, что так может получиться спагетти-код.

Благодарю ещё раз за ответы. Ваша последняя идея, наверное, самая лучшая по времени и памяти из тех, что я знаю. Пока оставлю так, как сделал, а на этапе рефакторинга/оптимизации попробую подобное провернуть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.06.2020, 21:40
Помогаю со студенческими работами здесь

Что значит Singleton& operator = ( Singleton& )?
// Singleton.h class Singleton { private: static Singleton * p_instance; // Конструкторы и оператор присваивания...

Singleton
Всем доброе время суток! У меня возникла одна проблема в классе Singleton у меня описана одна функция которую надо сделать private. ...

Singleton
Всем привет... не могу сообразить почему делают так: public class Singleton { private static volatile Singleton instance; ...

Singleton
Буду краток. Пропустил пару по Singleton( это только первое занятие было по паттернам). Дали лабу по singleton , а я ничего не пойму....

Singleton
Привет. Прошу помочь в решении такои задачи. Перевод немножко кривой. Если можно, то с пояснениями. Спасибо создать класс, который...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru