Вопрос

Я стараюсь сделать фон моего окна прозрачным.Но под виджетами, которые находятся на нем, я вижу части моего изображения на рабочем столе.Теперь у меня есть это в конструкторе:

    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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top