PyQt - Прозрачный фон
-
12-09-2019 - |
Вопрос
Я стараюсь сделать фон моего окна прозрачным.Но под виджетами, которые находятся на нем, я вижу части моего изображения на рабочем столе.Теперь у меня есть это в конструкторе:
self.setFocusPolicy(Qt.StrongFocus) self.setAttribute(Qt.WA_QuitOnClose,True) self.setBackgroundRole(QtGui.QPalette.Base) self.setAttribute(Qt.WA_NoSystemBackground)
Решение
В дополнение к ответу gs, этот faq объясняет, почему (до Qt 4.5) вы не можете достичь этого:
Ссылка на ЧАСТО задаваемые вопросы:
Нет прямой поддержки для частичной прозрачности, где окно является прозрачным, а виджеты в нем - не в Qt.
Помните, что самая последняя версия PyQt была создана под Qt 4.4 и поэтому не поддерживает желаемое полупрозрачное окно.другой ответ gs, о setAutoFillBackground (True), сработал бы, если бы вы устанавливали цвет фона вашего главного окна на что угодно, кроме прозрачного.
Также смотрите документацию для Qt.WA_NoSystemBackground, там говорится, что вы не можете зависеть от эффекта прозрачности, который у вас был до сих пор:
Qt::WA_NoSystemBackground (Исходный код системы)
Указывает, что виджет не имеет фона, т.е.когда виджет получает события рисования, фон не перерисовывается автоматически.Примечание:В отличие от WA_OpaquePaintEvent, недавно открытые области никогда не заполняются фоном (например, после первого показа окна пользователь может просматривать его "насквозь", пока приложение не обработает события рисования).Это установлено / очищено автором виджета.
Другие советы
Я только что нашел это:
Создание Полупрозрачных окон
Начиная с Qt 4.5, стало возможным создавать окна с полупрозрачными областями в оконных системах, поддерживающих компоновку.
Чтобы включить эту функцию в виджете верхнего уровня установите для него Атрибут Qt::WA_TranslucentBackground с помощью setAttribute() и убедитесь, что его фон окрашен в непрозрачные цвета в областях, которые вы хотите сделать частично прозрачными.
PyQt по-прежнему является Qt 4.4, возможно, в этом и есть проблема.
Попробуйте это для ваших виджетов:
widget.setAutoFillBackground(True)
Я думаю, вы также могли бы установить это в Qt Designer.