PySide2 передает события мыши в систему

Я использую QDialog с включенной прозрачностью, чтобы выбрать область экрана для инструмента захвата экрана. Когда пользователь щелкает внутри прозрачного виджета, я хочу игнорировать событие мыши, чтобы система обрабатывала его. Это возможно?

Я пытаюсь добиться этого в Linux.

Некоторые вещи, которые я пробовал безуспешно:

  • QtWidgets.QWidget.setWindowFlags(QtCore.Qt.WindowTransparentForInput)
  • QtWidgets.QWidget.setAttribute(QtCore.Qt.WA_TransparentForMouseEvents)
  • QtWidgets.QWidget.setMask(QtGui.QRegion(self.geometry()))
  • Создание подкласса mousePressEvent и игнорирование события

person Green Cell    schedule 16.10.2018    source источник
comment
попробуйте с: w.setWindowFlags(w.windowFlags() | QtCore.Qt.WindowTransparentForInput| QtCore.Qt.X11BypassWindowManagerHint)   -  person eyllanesc    schedule 16.10.2018
comment
Это помогло мне ее решить. Если вы превратите это в ответ, я любезно приму его :)   -  person Green Cell    schedule 18.10.2018


Ответы (1)


Вы должны использовать флаг X11BypassWindowManagerHint, чтобы пропустить оконный менеджер рядом с WindowTransparentForInput, чтобы система знала, что она должна только показать окно, но не уведомлять вас о входных данных.

w.setWindowFlags(w.windowFlags() | 
    QtCore.Qt.WindowTransparentForInput | 
    QtCore.Qt.X11BypassWindowManagerHint)
person eyllanesc    schedule 18.10.2018