PyQt - прозрачный фон - PullRequest
       22

PyQt - прозрачный фон

5 голосов
/ 21 апреля 2009

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

    self.setFocusPolicy(Qt.StrongFocus)
    self.setAttribute(Qt.WA_QuitOnClose,True)

    self.setBackgroundRole(QtGui.QPalette.Base)
    self.setAttribute(Qt.WA_NoSystemBackground)

Ответы [ 3 ]

4 голосов
/ 21 апреля 2009

Я только что нашел это :

Создание полупрозрачных окон

Начиная с Qt 4.5 стало возможным создавать окна с полупрозрачным регионы на оконных системах, которые поддерживают композитинга.

Чтобы включить эту функцию на верхнем уровне виджет, установите его Атрибут Qt :: WA_TranslucentBackground с setAttribute () и убедитесь, что его фон окрашен непрозрачные цвета в регионах, которые вы хочу быть частично прозрачным.

PyQt по-прежнему Qt 4.4, возможно, в этом проблема.

2 голосов
/ 22 апреля 2009

В дополнение к ответу gs, этот FAQ объясняет, почему (до Qt 4.5) вы не можете достичь этого:

FAQ FAQ:

Нет прямой поддержки частичного прозрачность, где окно прозрачный и виджеты на нем не в Qt.

Помните, самая последняя версия PyQt была создана для Qt 4.4 и поэтому не поддерживает желаемое полупрозрачное окно. Другой ответ gs о setAutoFillBackground (True) сработал бы, если бы вы устанавливали цвет фона вашего главного окна на что-то кроме прозрачного.

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

Qt :: WA_NoSystemBackground

Указывает, что виджет не имеет фон, то есть когда виджет получает события краски, фон не перекрашивается автоматически Замечания: В отличие от WA_OpaquePaintEvent, недавно открытые участки никогда не заполняются фон (например, после показа окно в первый раз пользователь может видеть "до конца", пока приложение обрабатывает события рисования). Это устанавливается / очищается автором виджета.

2 голосов
/ 21 апреля 2009

Попробуйте это для ваших виджетов:

widget.setAutoFillBackground(True)

Я думаю, вы также можете установить его в Qt Designer.

...