Как сделать скриншот окна Tkinter, когда оно не на верхнем уровне? - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь сделать снимок экрана из окна, сделанного с помощью Tkinter, но когда окно находится не на верхнем уровне, я просто получаю то, что вижу на экране. Я бы предпочел иметь скриншот самого окна, даже если поверх него есть windows.

Вот минимальный пример, с которого можно начать. Я только что сделал функцию сохранения скриншота с помощью ImageGrab. Функция, которая вызывается, когда я нажимаю на File.screenshot или когда я нажимаю на кнопку приветствия. Функция, использующая паузу в 2 секунды, например, у меня есть время, чтобы получить еще одно окно поверх Tkinter.

В конце я хотел бы получить изображение окна Tkinter вместо изображения мой экран. например, если я помещаю другое окно сверху, я получаю: enter image description here

   from tkinter import *
   from PIL import ImageGrab
   import time
   top = Tk()
   top.geometry("600x400")
   def helloCallBack():
          time.sleep(2)
          x = top.winfo_rootx()
          y = top.winfo_rooty()
          xx = x + top.winfo_width()
          yy = y + top.winfo_height()
          print(x,y,xx,yy)
          ImageGrab.grab(bbox=(x, y, xx, yy)).save("screenImage2.jpg")

   menuBar = Menu(top)
   menuFile = Menu(menuBar, tearoff=0)
   menuFile.add_command(label="Screenshot", command=helloCallBack)
   menuBar.add_cascade( label="File", menu=menuFile)
   top.config(menu = menuBar)
   B = Button(top, text = "Hello", command = helloCallBack)
   B.place(x = 50,y = 50)
   top.mainloop()
...