覆盖所有屏幕并用鼠标绘制矩形

时间:2020-04-08 08:21:10

标签: python user-interface python-imaging-library pywin32 beeware

我正在开发一个捕获屏幕打印的小程序,我想以类似于Win Snipping Tool的工作方式进行操作。首先,我需要在所有屏幕上覆盖不透明度为50%的图层,然后使用鼠标绘制一个矩形并读取顶点坐标。老实说,我不知道该怎么咬。我尝试使用win32api / gui并获得鼠标坐标非常好,但仍然无法绘制矩形。我的想法(是其中之一)是(使用PIL / ImageGrab)拍摄两个显示器的照片,放置一个覆盖层,然后在所有窗口上将它们打印为全屏,但是这样做却失败了。另一个想法是进行img抓取,并使用BeeWare / Toga(即我正在使用的GUI框架)在全屏模式下创建两个新窗口,但是我找不到在第二个显示器上打开窗口的任何方法。任何想法和提示都将不胜感激,我真的指望您,因为我觉得自己已经走到了尽头。

1 个答案:

答案 0 :(得分:0)

嗯,tkinter非常容易使用。 好的,这是我制作屏幕截图应用程序的原则:

  1. 用户按下按钮即可开始。
  2. 创建一个新窗口,其宽度和高度应完全覆盖所有屏幕,并隐藏标题栏(如果必须实现,则可以使用width=9999height=9999)。
  3. 为所有桌面截图(您可以使用ImageGrab.grab((),all_screens=True))。
  4. 制作Canvas中显示的屏幕截图(我知道toga拥有此小部件)。
  5. 启动鼠标侦听器线程并保存按下位置。
  6. 当用户移动鼠标时,创建一个矩形(toga's Canvas有一个功能rect())。也许使用此rect(pressed_x,pressed_y,move_x,move_y)。并删除最后一个矩形(然后它将始终仅显示一个矩形)。
  7. 当用户释放鼠标时,保存释放位置。然后使用ImageGrab.grab((pressed_x,pressed_y,released_x,released_y),all_screens=True)裁剪所选区域。
  8. 如果要在应用程序界面中显示它。toga有一个名为ImageView的小部件。您可以将图像放入其中。