全局事件分发器和局部事件分发器 的案例
时间: 2024-02-12 12:06:55 浏览: 140
matlab求导代码-entropy-search:信息有效的全局优化的熵搜索-JMLRv13
下面是一个简单的案例,演示如何使用全局事件分发器和局部事件分发器。
假设我们有一个主窗口 MainWindow,其中包含一个按钮 button。我们想要在用户点击按钮时执行一些操作,同时也想要在用户在窗口中移动鼠标时输出鼠标坐标。
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
from PyQt5.QtCore import QEvent, Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('事件分发器示例')
self.setGeometry(100, 100, 400, 300)
# 创建一个按钮
self.button = QPushButton('按钮', self)
self.button.setGeometry(100, 100, 100, 50)
# 将按钮的点击事件连接到槽函数
self.button.clicked.connect(self.on_button_clicked)
# 安装全局事件过滤器
qapp = QApplication.instance()
qapp.installEventFilter(self)
def on_button_clicked(self):
print('按钮被点击了!')
def eventFilter(self, obj, event):
if event.type() == QEvent.MouseMove and obj == self:
print('鼠标移动到了坐标:', event.pos())
return super().eventFilter(obj, event)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
在上面的代码中,我们创建了一个 MainWindow 窗口,其中包含一个按钮 button。我们将按钮的点击事件连接到 on\_button\_clicked 槽函数中。
我们还安装了一个全局事件过滤器,以便在应用程序中捕获所有事件。在事件过滤器中,我们检查了事件类型是否为鼠标移动事件,并且检查了事件对象是否为 MainWindow 窗口。如果是,则输出鼠标坐标。
当用户在窗口中移动鼠标时,我们可以看到鼠标坐标被输出到控制台。当用户点击按钮时,我们也可以看到按钮被点击了的消息被输出到控制台。这说明我们成功地使用了全局事件分发器和局部事件分发器。
阅读全文