Мы пытаемся создать QMainWindow с эффектом прозрачности Mac OSX Yosemite. Мы используем PyQt, но проблема в Qt. С тем, что мы пробовали до сих пор, оно всегда либо полностью прозрачно, либо полностью непрозрачно (как обычное окно). Если мы включим Qt.WA_TranslucentBackground, фон окна станет полностью прозрачным на 100%.
Кроме того, QGraphicsView, который мы отображаем на нем, оставляет следы при прокрутке. Ввод мыши также «проходит через» прозрачные части — щелчок по прозрачной части графического представления будет регистрироваться как щелчок по окну за ним. Установка таблицы стилей с любым пользовательским цветом фона не имеет никакого эффекта. Если мы отключим его, окно останется непрозрачным. Затем мы можем изменить цвет фона с помощью таблицы стилей, но он по-прежнему будет непрозрачным.
Включение и выключение Turing WA_FramelessWindowHint, похоже, тоже ничего не исправляет. Не работает и setAutoFillBackground(). Вы знаете, как сделать окно с эффектом прозрачности Yosemite?
Вот пример программы Python для проверки:
# Attempt at Mac OSX Translucency (example code)
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
Qt = QtCore.Qt
class ExampleMainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.testWidget = QtWidgets.QLabel('Test label, which should be transparent')
# Make sure the testWidget is transparent
self.testWidget.setStyleSheet('background: transparent')
self.testWidget.setAttribute(Qt.WA_TranslucentBackground, True)
self.testWidget.setAutoFillBackground(True)
self.setStyleSheet('background: rgba(255, 255, 255, 0.8)')
self.setAttribute(Qt.WA_TranslucentBackground, True)
self.setAutoFillBackground(True)
#self.setWindowFlags(Qt.FramelessWindowHint) # Doesn't seem to help
self.setCentralWidget(self.testWidget)
def main():
global app, exWindow
app = QtWidgets.QApplication(sys.argv)
exWindow = ExampleMainWindow()
exWindow.show()
exitcodesys = app.exec_()
app.deleteLater()
sys.exit(exitcodesys)
if __name__ == '__main__': main()