Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
 Аватар для morington
3 / 2 / 1
Регистрация: 24.12.2022
Сообщений: 19
PyQt6

Как удалить эффекты для детей виджета?

07.01.2023, 00:11. Показов 1048. Ответов 6

Студворк — интернет-сервис помощи студентам
Всем добра

Не могу никак найти ответа как правильно удалять или отключать установленный эффект родителя на его детей.
Предположим упрощенную ситуацию. Я создаю QWidget в нем находятся метка и кнопка, мне требуется кнопке задать тень, а метку отобразить без тени
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class GeneralWindow(QMainWindow):
    def __init__(self):
        super(GeneralWindow, self).__init__()
        self.resize(600,200)
 
        widget = QWidget(self)
        layout = QHBoxLayout(widget)
 
        widget2 = QWidget(self)
        layout2 = QVBoxLayout(widget2)
 
        lb = QLabel("Test")
        layout2.addWidget(lb)
        layout2.addWidget(QPushButton("QPushButton"))
 
        effect = QGraphicsDropShadowEffect(widget, blurRadius=5)
        widget.setGraphicsEffect(effect)
 
 
 
        layout.addWidget(widget2)
        self.setCentralWidget(widget)


Но эффект раздается всем, тем самым нарушая законы моей программы) Помогите)
p.s.
Кликните здесь для просмотра всего текста

Да да да, можно установить каждой кнопке по тени и делов то.. Но я упростил пример для понимания.
Реальная задача: Есть кастомный эффект создающий матовое стекло на фоне виджета (эффект не мой, я лишь настроил под себя), при добавление кнопок на него - каждая кнопка рисует при наведении на нее этот эффект, как бороться я не понимаю. Не так глубоко знаком с рисованием в Qt. Прошу вашей помощи.
Возможно с реальной задачкой проще, чем с упрощенным примером..
Эффект: https://pastebin.com/XR3ZXFPD
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.01.2023, 00:11
Ответы с готовыми решениями:

Как навести мышку на x,y внутри виджета относительно 0,0 виджета (левого верхнего угла виджета)?
Как навести мышку на x,y внутри виджета относительно 0,0 этого виджета (левого верхнего угла виджета)? Или, как получить координаты x,y...

2 xml-файла для виджета - Перерисовать окно виджета по нажатию
Нужно перерисовать окно виджета по нажатию. Причём, в обновлённом окне нужно использовать другой layout. Как реализовать?

Как добраться до виджета, который находится внутри другого виджета?
Есть QStackWidget, внутри которого на одной из страниц-виджетов находится QTabWidget. https://ibb.co/emgxd8 Как подобраться к...

6
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
07.01.2023, 10:43
morington, Если я правильно понял задачу.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class GeneralWindow(QMainWindow):
    def __init__(self):
        super(GeneralWindow, self).__init__()
        self.resize(600, 200)
 
        widget = QWidget(self)
        layout = QVBoxLayout(widget)
        self.setCentralWidget(widget)
 
        widget_top = QWidget()
        widget_bottom = QWidget()
        layout.addWidget(widget_top)
        layout.addWidget(widget_bottom)
 
        QLabel("Test", widget_top)
        QPushButton("QPushButton", widget_bottom)
 
        effect = QGraphicsDropShadowEffect(blurRadius=5)
        widget_bottom.setGraphicsEffect(effect)
Добавлено через 1 минуту
Вам надо задать эффект определенному виджету. И соответственно все что вы дальше будете к нему привязывать, будет иметь этот эффект.
0
 Аватар для morington
3 / 2 / 1
Регистрация: 24.12.2022
Сообщений: 19
07.01.2023, 10:50  [ТС]
anton78spb, да, это как раз я имел ввиду в параграфе p.s.
Можно упрощенный пример решить кучей способов и Ваш способ тоже работает отлично


Но если взять реальную задачу, здесь разделением никак не сыграть, кнопки в любом случае будут на виджете
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
07.01.2023, 11:06
morington, Ок. Вот вариант, где все на одном виджете. Просто создайте класс для кнопок с эффектом, и используйте их.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class MyButton(QPushButton):
    def __init__(self, name, parent: QWidget = None):
        super().__init__(name, parent)
        self.setGraphicsEffect(QGraphicsDropShadowEffect(blurRadius=5))
 
 
class GeneralWindow(QMainWindow):
    def __init__(self):
        super(GeneralWindow, self).__init__()
        self.resize(600, 200)
 
        widget = QWidget(self)
        layout = QVBoxLayout(widget)
        self.setCentralWidget(widget)
 
        layout.addWidget(QLabel('Label - 1'))
        layout.addWidget(MyButton('Button - 1'))
        layout.addWidget(QLabel('Label - 2'))
        layout.addWidget(MyButton('Button - 2'))
0
 Аватар для morington
3 / 2 / 1
Регистрация: 24.12.2022
Сообщений: 19
07.01.2023, 12:38  [ТС]
anton78spb, так здесь идет эффект на кнопки. А требется эффект прикрутить к виджету, а на виджете разместить кнопки без наследования эффекта.

Добавлено через 1 час 8 минут
Один из вариантов, мне кажется, что нужно в draw смотреть на каком виджете будет рисовка. Но я пока не могу понять как это сделать.
И возможно сам ребенок просто напросто берет в качестве основы родительский виджет и проверкой этого не добиться тогда..
0
1956 / 874 / 352
Регистрация: 05.09.2021
Сообщений: 1,387
07.01.2023, 13:46
morington, Возможно надо опять же создать свою кнопку, которая в init будет сбрасывать setGraphicsEffect для себя.
0
 Аватар для morington
3 / 2 / 1
Регистрация: 24.12.2022
Сообщений: 19
08.01.2023, 16:58  [ТС]
anton78spb, также пробовал. Это к сожалению не работает, хотя также является логичным путем, почему не сделали так..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.01.2023, 16:58
Помогаю со студенческими работами здесь

Как реализовать эффекты и анимацию для контролов
всем привет! я хочу сделать всякие эффекты, анимации для контролов. есть какой-нибудь хороший сайтик?примеры например, чтобы смотреть и...

Как с помошью System.Text.Json пройтись по всему Json дереву и удалить пустых детей?
Нужно сделать универсальный метод удаления пустых Json фрагментов в переданном Json. К примеру, свойства с пустым массивом, строкой или...

Как сделать раскраску для детей?
Добрый день, уже посмотрел все но так и не смог найти ответа. Дело в том нужно сделать что то наподобии расскраски для дете

Как создать программу раскраска для детей?
не могу решит эту проблему как создать программа раскраска для детей в Visual basic.net если занаети скажите пожалуйста зарание спасибо

Как создать меню для виджета?
Не могу разобраться с этим кодом. QMenuBar menuBar; QMenu* pmnu = new QMenu("&Menu"); menuBar.addMenu(pmnu); ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru