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

获取全局鼠标位置并在python程序中使用?,python,tkinter,mouse,screenshot,Python,Tkinter,Mouse,Screenshot,作为一个更大项目的一部分,我正在尝试创建一个类似于MacOSX快照的快照工具。它应该第一次单击,第二次单击,然后返回由正方形创建的区域的图像 我有一些python函数,它们获取第一个点(x,y)和第二个点(x,y),并创建这些点在屏幕截图上创建的正方形的快照。缺少的部分是获取初始单击和第二次单击的鼠标位置,然后将该数据传递给python程序以创建快照 换句话说,程序的流程应该是: 第一次单击(保存x,y) 第二次单击(保存x2、y2) 使用保存的单击数据运行snapshot.py以返回屏幕截图

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

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

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

  • 第一次单击(保存x,y)
  • 第二次单击(保存x2、y2)
  • 使用保存的单击数据运行snapshot.py以返回屏幕截图
  • 我只找到了可以返回指针在帧内位置的解决方案。如果有帮助,我将使用“导入gtk”和“从Xlib导入显示”

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

    编辑2:这段代码可以创建一个窗口,使其透明,调整其在屏幕上的大小,然后返回该窗口上的鼠标坐标。我可以使用它简单地在两次单击时返回鼠标坐标,然后删除窗口并将这些坐标发送到快照代码。当我在pythonshell中逐行运行下面的代码时,它工作得非常好。但是,每当我作为一个整体运行代码时,它似乎会跳过使窗口透明的部分。即使我将包含“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()
    
    从Tkinter导入*
    root=Tk()
    属性('-alpha',0.1)
    maxW=root.winfo_屏幕宽度()
    maxH=root.winfo_屏幕高度()
    几何体(“{0}x{1}+0+0.”格式(maxW,maxH))
    def回调(事件):
    打印“单击位置:”,事件.x“和:”,事件.y
    root.bind(“,回调)
    def退出(事件):
    root.destroy()
    root.bind(“,退出)
    #root.overrideredirect(True)
    root.mainloop()
    

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

    这只是缩进问题-您错误地将回调绑定到回调中-请尝试以下操作:

    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)
    

    这只是缩进问题-您错误地将回调绑定到回调中-请尝试以下方法:

    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)
    

    我不熟悉gtk,但作为一般原则,在需要拍摄快照时生成与屏幕大小相同的透明帧如何?完成透明窗口部分,如果你有鼠标位置代码,你应该都设置好了。谢谢,这为我指明了正确的方向,但我仍然有问题!透明的框架真是太棒了,我打算用它做点什么。我发现了回调的问题-请参阅下面的答案。我不熟悉gtk,但作为一般原则,在需要拍摄快照时生成一个与屏幕大小相同的透明帧如何?完成透明窗口部分,如果你有鼠标位置代码,你应该都设置好了。谢谢,这为我指明了正确的方向,但我仍然有问题!透明的框架真是太棒了,我打算用它做点什么。我发现回调有问题-请参阅下面的答案。这实际上是将代码复制到stackoverflow中的一个错误。。。真正的问题在于其他地方。当我在pythonshell中逐行运行代码时,窗口弹出,它填充屏幕,变得透明,并返回“clickedtax,y”文本。但是当我使用“python file.py”运行代码时,它会带来一个完全不同的场景。弹出的框架填充为白色且不透明,不再返回鼠标位置。有什么想法吗?@swagadactyl哦,嗯-我无法在Mac OS X 10.7和python 2.7中重现这一点-无论是在命令行还是在python shell中运行,它都很适合我。我猜这和你使用的系统有关。你在用什么操作系统?另外,您使用的是什么python shell,它是否与您使用命令
    which python
    ?Ubuntu获得的python相同。在shell中逐行运行的程序与使用“python file.py”同时运行的程序之间存在差异,这似乎有些奇怪。这应该会发生吗?“哪个python”返回/usr/bin/python,“python--version”返回python 2.7.3,而运行shell的“python”显示了它在linux2Hmm上运行的python 2.7.2[GCC 4.6.3]……您知道为什么
    python--version
    和python shell报告的版本之间存在差异吗?我的怀疑是,在shell中运行时调用的窗口管理器支持合成,而在命令行中运行时调用的是另一个窗口管理器。我试图找到的解决方案是,当我键入
    python file.py
    时,确保我使用的是与python外壳完全相同的python安装,因为它在外壳中工作。这实际上是将代码复制到stackoverflow中的错误。。。真正的问题在于其他地方。当我在pythonshell中逐行运行代码时,窗口弹出,它填充屏幕,变得透明,并返回“clickedtax,y”文本。但是当我使用“python file.py”运行代码时,它会带来一个完全不同的场景。弹出的框架填充为白色且不透明,不再返回鼠标位置。有什么想法吗