Я пишу скрипт Qt5 PySide2 на Ubuntu 20.04.
Я хотел бы сделать часть окна прозрачной, скажем, рамку, чтобы я мог видеть другие оконные программы (например, Firefox, LibreOffice и т. д.), которые находятся ниже окна. (Если это невозможно, было бы нормально, если бы все окно было полупрозрачным, что я уже знаю, как это сделать, но мне также нужно отобразить некоторые кнопки и другие виджеты в стороне и иметь возможность взаимодействовать с ними). Я могу сделать это с
Qt.WA_TranslucentBackground
Там, где мое приложение прозрачно (часть (мне бы хотелось) или все окно (это вполне приемлемо), независимо от решения), мне также нужно иметь возможность взаимодействовать с программой ниже. Я могу сделать это с
Qt.WindowTransparentForInput
Проблема возникает, когда я пытаюсь объединить эти две функции. В первом случае я получаю прозрачное окно, но не могу взаимодействовать с тем, что ниже. Во втором случае я получаю непрозрачное окно, но могу взаимодействовать с тем, что внизу, хотя и вслепую.
Я видел, что добавление Qt.FramelessWindowHint
решает и то, и другое, но тогда я больше не могу перемещать окно, и я также хотел бы сохранить украшения окна заголовка, такие как x для закрытия окон или - для его минимизации.
Конечная цель для меня - нарисовать стрелки на прозрачном холсте Qt5 в моей программе, конечный пользователь может видеть стрелку, видеть веб-страницу ниже и может взаимодействовать с этой веб-страницей. Но не только браузеры, хотелось бы, чтобы инвалиды и старики получали наглядные пособия и в других программах. Именно поэтому я предпочел бы, чтобы только часть моего графического интерфейса была прозрачной (я уже говорил о фрейме), потому что пользователь всегда должен видеть, что программа находится поверх других приложений.
Спасибо
region |= QtGui.QRegion(self.someFloatingWidget.geometry())
- person musicamante   schedule 24.02.2021setMask()
, как показано здесь. Также обратите внимание, чтоQt.WA_TranslucentBackground
иQt.WindowTransparentForInput
, вероятно, несовместимы (и на самом деле не обязательны) с этим, поэтому вам не следует их использовать. - person musicamante   schedule 24.02.2021setMask
, как описано в другом ответе, вы должны попытаться уточнить, что вы пытались и как это не решает вашу проблему, возможно, расширив свой вопрос с помощью MRE, показывающего нам, что хорошо, а что нет. В противном случае маловероятно, что за это время будет дан другой ответ, и вы рискуете потерять репутацию, а решения вашего вопроса так и не будет. - person musicamante   schedule 01.03.2021