我试图检测鼠标点击我的GUI,和下面的代码允许鼠标点击的检测在1层的QWidget的点击鼠标穿透Qwidgets到pyside的应用程序?
import sys
from PySide import QtGui, QtCore
class MouseDetector(QtCore.QObject):
def eventFilter(self, obj, event):
if event.type() == QtCore.QEvent.MouseButtonPress:
print 'mouse pressed', obj
return super(MouseDetector, self).eventFilter(obj, event)
class MainWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
layout = QtGui.QHBoxLayout()
layout.addWidget(QtGui.QLabel('this is a label'))
layout.addWidget(QtGui.QPushButton('Button'))
self.setLayout(layout)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
mouseFilter = MouseDetector()
app.installEventFilter(mouseFilter)
main = MainWindow()
main.show()
sys.exit(app.exec_())
但是如果我有嵌入的QWidget和一个QWidget内一个QWidget中,鼠标点击不会穿透应用程序。
不仅如此,令人困惑的是,当我将事件过滤器安装到内部小部件时,鼠标点击仍然不会被检测到。
# Widget x.1 is embedded in Widget X
# -----------------Widget x.1-----------------------
# | |
# | |
# | ---------------------- ---------------------| |
# | | | | | |
# | | Widget x.1.1 | | | Widget x.1.2 |
# | | | | | |
# | ---------------------- ---------------------| |
# | |
# --------------------------------------------------
我接近解决方案错了吗?任何意见将不胜感激。
请显示嵌入Widgets的代码。 – NorthCat