1

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

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

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

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

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

编辑:我尝试使用 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++ 代码或任何语言的代码来返回单击鼠标的坐标。这个人写了一些代码来让计算机在给定的点上点击,这可能和我的问题在同一个轨道上。

4

1 回答 1

1

这只是一个缩进问题 - 您错误地将回调绑定在回调中 - 试试这个:

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)
于 2013-08-13T13:50:33.733 回答