Я пытаюсь открыть пару всплывающих окон (верхнего уровня), которые безрамные. Я могу добиться этого с помощью:
window.setWindowFlags(Qt.FramelessWindowHint | Qt.Dialog)
Но проблема в том, что окна не проходят через композитор ОС (например, в окнах нет теней).
Я могу получить тени для окон с помощью флагов Qt.Popup и Qt.ToolTip, но у них обоих есть проблемы с поведением, всплывающие подсказки всегда находятся сверху, а всплывающие окна закрываются, когда их фокус теряется.
Итак, есть ли способ показать безрамное окно с эффектом тени менеджера окон ОС по умолчанию?
Нашел обходной путь на окнах. но я не мог сделать это с Qt, поэтому я использовал хак win32.
Добавьте это в конструктор класса QWidget:
if sys.platform == 'win32':
import win32api
win32api.SetClassLong(eval(self.winId().__hex__()), -26, 0x0008 | 0x00020000)
Я на самом деле добавил стиль CS_DROPSHADOW в стили класса окна
Это может помочь следующим пользователям использовать флаг Qt.ToolTip и избежать появления всплывающих подсказок.
self.setWindowFlags(self.windowFlags() | Qt.ToolTip)
self.setWindowFlags(self.windowFlags() & ~Qt.WindowStaysOnTopHint)