python - 获取全局鼠标位置并在python程序中使用?

标签 python tkinter mouse screenshot

作为一个更大项目的一部分,我正在尝试创建一个与 Mac OS X 快照类似的快照工具。它应该进行第一次单击、第二次单击,然后返回由正方形创建的区域的图像。

我有一些 python 函数,它们采用第一个点 (x, y) 和第二个点 (x, y) 并创建这些点在屏幕截图上创建的正方形的快照。缺少的部分是获取第一次单击和第二次单击的鼠标位置,然后将该数据传递给 python 程序以创建快照。

换句话说,程序的流程应该是:

  1. 第一次点击(保存x、y)
  2. 第二次点击(保存 x2、y2)
  3. 使用保存的点击数据运行snapshot.py以返回屏幕截图

我只找到了可以返回帧内指针位置的解决方案。如果有帮助,我正在使用“导入 gtk”和“从 Xlib 导入显示”

编辑:我尝试使用 Tkinter 制作一个覆盖整个屏幕的隐形框架。这个想法是使用那个不可见的框架来获取两次鼠标点击的精确坐标,然后不可见的框架就会消失,将坐标传递给屏幕截图功能,然后就完成了。但是,我一直在编写的代码并没有使框架保持透明。

编辑2:此代码可以创建一个窗口,使其透明,调整其大小以适合屏幕,然后返回该窗口上的鼠标坐标。我可以使用它来简单地通过两次单击返回鼠标坐标,然后删除窗口并将这些坐标发送到快照代码。当我在 python shell 中逐行运行下面的代码时,它运行得很好。然而,每当我作为一个整体运行代码时,它似乎都会跳过使窗口透明的部分。即使我将包含“attributes("-alpha", 0.1)”的代码块复制并粘贴到 python shell 中,它也会忽略该行。

from Tkinter import *

root = Tk()
root.attributes('-alpha', 0.1)

maxW = root.winfo_screenwidth()
maxH = root.winfo_screenheight()

root.geometry("{0}x{1}+0+0".format(maxW, maxH))

def callback(event):
    print "clicked at: ", event.x, "and: ", event.y

root.bind("<Button-1>", callback)

def Exit(event):
    root.destroy()
root.bind("<Escape>", Exit)


# root.overrideredirect(True)

root.mainloop()

我愿意使用任何 C 或 C++ 代码或任何语言的代码,在单击时返回鼠标的坐标。 This guy写了一些代码来实际让计算机在给定点点击,这可能与我的问题在同一轨道上。

最佳答案

这只是一个缩进问题 - 您错误地将回调绑定(bind)在回调中 - 请尝试以下操作:

root.geometry("{0}x{1}+0+0".format(maxW, maxH))

def callback(event):
    print "clicked at: ", event.x, "and: ", event.y

root.bind("<Button-1>", callback)

编辑

好吧,这是一个理论 - 也许当您从命令行运行它时,由于某种原因,根窗口需要更长的时间才能出现,因此您在它存在之前设置了 alpha,并且 alpha 选项被忽略。尝试一下:

root.wait_visibility(root)
root.attributes('-alpha', 0.1)

关于python - 获取全局鼠标位置并在python程序中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18199721/

相关文章:

javascript - 使用任意方法(插件、GreaseMonkey?)在 Chrome 或 Firefox 中使用 JavaScript 移动鼠标光标

python - 获取具有给定总和的所有子集的递归程序包括重复

python - Django 调试工具栏是否适用于 DRF?

python - 当二维数组作为变量时计算函数

python - 如何更新 Tkinter Canvas 上的绘图?

java - 如何在Java中获取我的窗口外的鼠标点击坐标

python - 使用 PyOpenGL 从索引缓冲区渲染框出现问题

python - 如何在 Tkinter 中检测圆圈的某种颜色?

python - tkinter 中的依赖小部件

javascript - 不使用 JQuery 检测鼠标移动