使用 PyQt4 在 QWidget 上进行 eventFilter

2024-05-05

我有一个 QMainWindow 其中包含DrawingPointsWidget。该小部件随机绘制红点。我通过使用以下命令为 MouseHovering 事件安装事件过滤器,在 QMainWindow 的状态栏中显示鼠标坐标self.installEventFilter(self)并通过实施eventFilter()方法 。有用。但是我想获取这个红点小部件上的鼠标坐标,而不是 QMainWindow 上的坐标。所以我希望当鼠标位于点部件的左上角而不是 QMainWindow 的左上角时,状态栏显示 [0, 0]。我怎么做?我试过self.installEventFilter(points)但什么也没发生。

您将在下面找到一段工作代码。


EDIT 1

看来如果我写points.installEventFilter(self), the QtCore.Event.MouseButtonPressed检测到事件时,仅HoverMove不是。所以HoverMove我的设备上未检测到事件DrawingPointsWidget这是一个QWidget。 令人惊讶的是,HoverMove检测到事件QPushButton这是一个QAbstractButton这是一个QWidget也!我需要写button.installEventFilter(self)

import sys
import random
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import *

class MainWindow(QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.__setUI()

    def __setUI(self, appTitle="[default title]"):
        self.statusBar()

        mainWidget = QWidget()
        vbox = QVBoxLayout()

        button = QPushButton("Hello")
        vbox.addWidget( button )

        points = DrawingPointsWidget()

        vbox.addWidget(points)

        mainWidget.setLayout(vbox)
        self.setCentralWidget(mainWidget)
        self.installEventFilter(self)

    def eventFilter(self, object, event):

        if event.type() == QtCore.QEvent.HoverMove:
            mousePosition = event.pos()
            cursor = QtGui.QCursor()

            self.statusBar().showMessage(
                "Mouse: [" + mousePosition.x().__str__() + ", " + mousePosition.y().__str__() + "]"
                + "\tCursor: [" + cursor.pos().x().__str__() + ", " + cursor.pos().y().__str__() + "]"

            )

            return True

        elif event.type() == QtCore.QEvent.MouseButtonPress:
            print "Mouse pressed"
            return True

        return False

class DrawingPointsWidget(QWidget):
    ""
    def __init__(self):
        super(QWidget, self).__init__()
        self.__setUI()

    def __setUI(self):

        self.setGeometry(300, 300, 280, 170)
        self.setWindowTitle('Points')
        self.show()

    def paintEvent(self, e):
        "Re-implemented method"

        qp = QtGui.QPainter()
        qp.begin(self)
        self.drawPoints(qp)
        qp.end()

    def drawPoints(self, qp):

        qp.setPen(QtCore.Qt.red)

        "Need to get the size in case the window is resized -> generates a new paint event"
        size = self.size()

        for i in range(1000):
            x = random.randint(1, size.width()-1 )
            y = random.randint(1, size.height()-1 )
            qp.drawPoint(x, y)


def main():
    app = QApplication(sys.argv)
    #window = WidgetsWindow2()
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

首先需要设置事件过滤器by您想要观看的对象:

points.installEventFilter(self)

其次,你需要监听的事件是MouseMove not HoverMove:

if event.type() == QtCore.QEvent.MouseMove:

最后,您需要在目标小部件上启用鼠标跟踪:

class DrawingPointsWidget(QWidget):
    def __init__(self):
        super(QWidget, self).__init__()
        self.setMouseTracking(True)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PyQt4 在 QWidget 上进行 eventFilter 的相关文章

  • 管理 Tweepy API 搜索

    如果这是对之前在其他地方回答过的问题的粗略重复 请原谅我 但我不知道如何使用 tweepy API 搜索功能 是否有任何有关如何使用搜索推文的文档api search 功能 有什么方法可以控制返回的推文数量 结果类型等功能 由于某种原因 结
  • 如何使 Django ManyToMany “直通”查询更加高效?

    我使用的是 ManyToManyField 和 through 类 这会在获取事物列表时产生大量查询 我想知道是否有更有效的方法 例如 这里有一些描述书籍及其几位作者的简化类 它们通过角色类 定义 编辑器 插画家 等角色 class Per
  • sphinx 中的分组方法文档字符串

    是否可以使用 sphinx 的 autodoc 功能将多个方法文档字符串分组 以便将它们列在一起 class Test object def a self A method of group foo def b self A method
  • 是否可以在 Sphinx 中隐藏 Python 函数参数?

    假设我有以下函数 该函数记录在Numpydoc 风格 https github com numpy numpy blob master doc HOWTO DOCUMENT rst txt 并且文档是自动生成的Sphinx http sph
  • 查找 python 数据框中每行的最高值

    我想找到每行中的最高值并返回 python 中该值的列标题 例如 我想找到每行的前两个 df A B C D 5 9 8 2 4 1 2 3 我希望我的输出看起来像这样 df B C A D 您可以使用字典理解来生成largest n数据帧
  • S3 选择检索 CSV 中的标头

    我尝试使用以下代码从存储在 S 存储桶中的 CSV 中获取记录子集 s3 boto3 client s3 bucket bucket file name file sql stmt SELECT S FROM s3object S LIMI
  • 来自数据框 groupby 的条形图

    import pandas as pd import numpy as np import matplotlib pyplot as plt df pd read csv arrests csv df df replace np nan 0
  • 如何将一串Python代码编译成一个可以调用函数的模块?

    在 Python 中 我有一串 Python 源代码 其中包含以下函数 mySrc def foo print foo def bar print bar 我想将这个字符串编译成某种形式类似模块的对象这样我就可以调用代码中包含的函数 这是我
  • 将 for 循环替换为 pyspark 中的并行进程

    我在脚本中使用 for 循环来为 size DF 数据帧 的每个元素调用函数 但这需要很多时间 我尝试通过地图删除 for 循环 但没有得到任何输出 size DF 是我从表中获取的大约 300 个元素的列表 用于 import call
  • Bottle 是否可以处理没有并发的请求?

    起初 我认为 Bottle 会并发处理请求 所以我编写了如下测试代码 import json from bottle import Bottle run request response get post import time app B
  • 如何将字符串方法应用于数据帧的多列

    我有一个包含多个字符串列的数据框 我想使用对数据帧的多列上的系列有效的字符串方法 我希望这样的事情 df pd DataFrame A 123f 456f B 789f 901f df Out 15 A B 0 123f 789f 1 45
  • 使用 .map() 在 pandas DataFrame 中高效创建附加列

    我正在分析形状与以下示例类似的数据集 我有两种不同类型的数据 abc数据和xyz data abc1 abc2 abc3 xyz1 xyz2 xyz3 0 1 2 2 2 1 2 1 2 1 1 2 1 1 2 2 2 1 2 2 2 3
  • 让 TensorFlow 在 ARM Mac 上使用 GPU

    我已经安装了TensorFlow在 M1 上 ARM Mac 根据这些说明 https github com apple tensorflow macos issues 153 一切正常 然而 模型训练正在进行CPU 如何将培训切换到GPU
  • 与 GNU Make 等 Python 相关的并行任务并发

    我正在寻找一种方法或者可能是一种哲学方法来如何在 python 中执行类似 GNU Make 的操作 目前 我们使用 makefile 来执行处理 因为 makefile 非常擅长通过更改单个选项 j x 进行并行运行 此外 gnu mak
  • 单击 selenium 中的链接时循环遍历表格的行(python)

    示例页面源代码如下所示 div class div1 table class foot market tbody td class today name td tbody tbody td class today name td tbody
  • 在Python中打开网站框架或图像

    所以我对 python 相当熟练 并且经常使用 urllib2 和 Cookies 来实现网站自动化 我刚刚偶然发现了 webbrowser 模块 它可以在默认浏览器中打开一个网址 我想知道是否可以从该 url 中仅选择一个对象并打开它 具
  • 在哪里可以找到Python内置序列类型的时间和空间复杂度

    我一直无法找到此信息的来源 无法亲自查看 Python 源代码来确定这些对象是如何工作的 有谁知道我可以在网上找到这个吗 结帐时间复杂度 http wiki python org moin TimeComplexitypy dot org
  • Matplotlib 渲染日期、图像的问题

    我在使用 conda forge 的 Matplotlib v 3 1 3 和 python 3 7 时遇到问题 我拥有 Matplotlib 所需的所有依赖项 当我输入这段代码时 它应该可以工作 我得到了泼溅艺术 它基于此 YouTube
  • 将自定义属性添加到 Tk 小部件

    我的主要目标是向小部件添加隐藏标签或字符串之类的内容 以在其上保存简短信息 我想到创建一个新的自定义 Button 类 在本例中我需要按钮 它继承所有旧选项 这是代码 form tkinter import class NButton Bu
  • perfmon 性能计数器是否基于与 xperf 使用的 ETW 事件“幕后”相同的东西?

    我最近开始熟悉 perfmon 和 xperf Perfmon 使用性能计数器 xperf 使用 ETW Windows 事件跟踪 Perfmon 具有提供数据的对象 而 xperf 使用 提供者 组 作为这个领域的新手 我想问是否有人可以

随机推荐

  • 为什么多表连接会产生重复行?

    假设我有三个表 A B 和 C 每个表都有两列 一个主键和一些其他数据 它们每个都有相同的行数 如果我JOIN主键上的 A 和 B 我最终应该得到与其中任何一个相同的行数 而不是 A rows B rows 现在 如果我JOIN A JOI
  • 如何从 OnChange 事件捕获文本框的值

    在我的 C MVC 应用程序中 我有一系列这样生成的文本框 foreach object item in items Html TextBox 渲染的结果是一系列看起来像这样的文本框
  • 如何使用 Material UI 制作一个圆形复选框?

    我尝试匹配的设计要求复选框为圆形 我正在使用 Material UI 和 React 边框半径不起作用 因为实际图标的边框不是可见复选框的边框 我不能只使用像 Font Awesome 这样的东西 因为它需要实际检查和取消检查 Curren
  • C# 中的 DateTime.Parse 抛出异常

    我不知道为什么抛出异常 这是工作代码 DateTime Parse 1 12 2012 12 00 00 AM 这是抛出异常的一个 DateTime Parse 1 13 2012 12 00 00 AM 抛出的异常是 格式异常 包括此消息
  • iPad SplitViewController 具有纵向模式菜单,如设置应用程序

    我想在我的 iPad 应用程序上获得 SplitView 其中左侧菜单处于纵向 例如 iPad 设置 现在 在纵向方向上 我有一个全屏内容视图 并且导航栏上有一个按钮 其中包含一个带有左侧菜单的弹出窗口 这就是你需要的魔法 该方法位于 UI
  • NASM 轮班操作员

    您将如何在寄存器上进行 NASM 中的位移位 我读了手册 它似乎只提到了这些操作员 gt gt lt lt 当我尝试使用它们时 NASM 抱怨移位运算符处理标量值 您能解释什么是标量值并举例说明如何使用 gt gt and lt lt 另外
  • 使用 Android Intent 发送基于 HTML 的电子邮件正文

    我需要使用 android Intent extra 将基于 HTML 的内容发送到电子邮件应用程序 它接受一些标签 例如 br 但它没有显示任何锚链接或 h1 其显示像简单的文本 EDITED I have tried with gmai
  • 如何使用生成器遍历文件系统?

    我正在尝试创建一个实用程序类来遍历目录中的所有文件 包括子目录和子子目录中的文件 我尝试使用发电机 因为发电机很酷 然而 我遇到了困难 def grab files directory for name in os listdir dire
  • Pymacs 助手在 30 秒后未启动

    我见过其他关于此的问题 但没有一个得到真正的回答 而且没有一个是我的问题 我有一个新系统 emacs 23 1 Centos 6 2 我认为 我下载了最新的 pymacs 并安装了它 但是 我得到 error Pymacs helper d
  • 发布到 Firebase 时,单元格会重复多次

    我正在制作一个可以发布消息的应用程序 我将数据存储在 Firebase 中 当我发布新消息时 该特定单元格会重复多次 因此我会看到该帖子 2 3 4 次或更多次 但这只是 Firebase 中的一篇文章 当我刷新屏幕 例如对数据进行排序 时
  • 通过 API Gateway 使用表单数据将图像发布到 Lambda 函数会导致文件无效

    I ve a 用 Go 编写的 Lambda 函数 https github com mhausenblas imgn blob master functions app uploadimg main go应该允许图像文件上传 通过 HTM
  • 仅使用 1 行 C++ 初始化 2d 向量

    我需要能够初始化一个 2D 向量 int同一条线我在其中创建它 更具体地说 我必须创建一个3x2大小 2D 向量并将其所有值设置为 0 仅使用1行代码 有没有一种方法可以在不使用 for 循环和几行代码的情况下完成此操作 尝试这个 std
  • clang-tidy - 忽略第三方标头代码

    我正在为我的项目使用 CMake 并且我想向项目引入 clang tidy 检查 我用于此目的CMAKE CXX CLANG TIDY and clang tidy用于检查设置的文件 我想在 CI 中使用警告作为错误来可靠地检查提交是否引入
  • Swing 是否支持 Windows 7 风格的文件选择器?

    我刚刚添加了一个标准 打开文件 与我正在编写的一个小型桌面应用程序的对话 基于JFileChooserSwing 教程的入口 http download oracle com javase tutorial uiswing componen
  • IOS:使用@property释放变量(非原子,保留)

    带有 property 非原子和保留的变量是否应该显式释放 interface MyScreenViewController UIViewController
  • 循环遍历字符串中的 html 标签并将内部文本添加到数组中

    我有一些 HTML 内容保存为字符串 我想循环遍历该字符串中的每个标题标签并获取其内部文本 let str h1 topic 1 h1 p desc of topic 1 p h1 topic 2 h1 p desc of topic 2
  • Visual Studio 2017 上的简单装配程序

    386 model flat c stack 100h printf PROTO arg1 Ptr Byte data msg1 byte Hello World 0Ah 0 code main proc INVOKE printf ADD
  • 如何允许另一个应用程序访问我的应用程序的数据目录?

    假设我有一个名为 A 的应用程序 其数据目录为 com example test 现在我想制作另一个名为 B 的应用程序来修改 com example test 中的某些内容 当然我知道两者必须共享相同的签名 但我还需要什么 基本上我正在尝
  • Java俄罗斯方块旋转

    我知道这个问题已经被问了很多 但我想知道如何旋转俄罗斯方块 我已经做了一个又长又糟糕的解决方案 大约 170 行代码 但应该有更简单的方法来做到这一点 我的俄罗斯方块由 4 个块组成 它们都知道它们在矩阵中的位置 行和列 Matrix本身是
  • 使用 PyQt4 在 QWidget 上进行 eventFilter

    我有一个 QMainWindow 其中包含DrawingPointsWidget 该小部件随机绘制红点 我通过使用以下命令为 MouseHovering 事件安装事件过滤器 在 QMainWindow 的状态栏中显示鼠标坐标self ins