2014-12-16 1 views
2

Пример кода here и он выглядит следующим образом:Как сделать окно на основе QWidget прозрачным фоном?

clock.

Основная стратегия заключается в использовании QBrush для загрузки изображения backgroud с числом и другим материалом, изначально изначально имеет прозрачный фон.

Но как сделать окно QWidget имеет прозрачный backgroud, застрял меня.

ответ

1

Если вам нужно иметь окно (на основе QWidget) с прозрачным фоном, вы можете, насколько мне известно, достичь этого только в том случае, если вы также сделаете окно бескаркасным.

Следующий пример. Важно установить флажок окна FramelessWindowHint и атрибут установки WA_TranslucentBackground.

from PySide import QtCore, QtGui 

app = QtGui.QApplication([]) 

window = QtGui.QWidget() 
window.setWindowFlags(QtCore.Qt.FramelessWindowHint) 
window.setAttribute(QtCore.Qt.WA_TranslucentBackground) 
window.show() 

layout = QtGui.QVBoxLayout(window) 
button = QtGui.QPushButton('Exit') 
button.clicked.connect(app.quit) 
layout.addWidget(button) 

app.exec_() 

Которая только показывает свободную кнопку.

+0

спасибо, я пробовал, что у него черный фон. – wanze

+0

@wanze Интересно. Для меня это полностью прозрачно. PySide и PyQt должны быть в значительной степени совместимы. Я также использую Python 3.4 в Windows 7. – Trilarion

+0

Я в системе Ubuntu и, возможно, проблема с операционной системой? или проблема с драйвером видео? Я должен отказаться от него сейчас. – wanze

4

В PyQt, вам нужно добавить флаг для всех существующих флагов окна с помощью побитового оператора |, чтобы сделать его работу:

window.setWindowFlags(window.windowFlags() | QtCore.Qt.FramelessWindowHint)

А потом сделать window.setAttribute(QtCore.Qt.WA_TranslucentBackground)

Запомнить для вызова метода show() после установки флагов. Цитирование документов здесь:

Примечание: Эта функция вызывает setParent() при изменении флагов для окна, в результате чего виджет будет скрыт. Вы должны вызвать show() сделать виджет видимым ..

Об операторе побитового: https://wiki.python.org/moin/BitwiseOperators

Надежда, которая была полезной.

Редактировать: Удалено некорректная информация, благодаря комментариям @ ekhumoro снизу.

+2

Оператор '^' неверен: он удалит флаг, если он уже присутствует. Всегда используйте '|', чтобы убедиться, что флаг установлен. Кроме того, 'setAttribute' не переключает атрибуты: вы должны явно передать' False' в качестве второго аргумента, чтобы удалить атрибут (то есть 'on' является' True' по умолчанию). – ekhumoro

+0

Спасибо за это @ekhumoro. Я отредактировал свой ответ, чтобы отразить то же самое. Раньше я использовал побитовое исключающее ИЛИ по ошибке. Это сработало, потому что я никогда не переставлял флаг, используя то же самое. Да, | это правильный путь. Спасибо, что поймали это. – kartikg3

+0

Документация была немного вводить в заблуждение: http://qt-project.org/doc/qt-4.8/qwidget.html#setAttribute Он сказал, что если true, OTHERWISE это очищает. Они должны были означать, если ЛОЖЬ.Они не указали поведение по умолчанию. Спасибо, что указали это тоже. – kartikg3

 Смежные вопросы

  • Нет связанных вопросов^_^