使用 ImageGrab.grab() 时发生奇怪的事情

Weird things happening when using ImageGrab.grab()

我有一些代码:

from tkinter import *
from tkinter import *
from PIL import Image, ImageGrab

root = Tk()


def capture():
    x0 = canvas.winfo_rootx()
    y0 = canvas.winfo_rooty()
    x1 = x0 + canvas.winfo_width()
    y1 = y0 + canvas.winfo_height()

    im = ImageGrab.grab((x0, y0, x1, x2))
    im.save('mypic.png')  # Can also say im.show() to display it


canvas = Canvas(root, bg='red')
canvas.pack(padx=10, pady=10)

e = Entry(root)

canvas.create_window(canvas.canvasx(100), canvas.canvasy(100), window=e)

Button(root, text='Click a pic', command=capture).pack()

root.mainloop()

它使 mypic:

这是我背景的一部分 但我想让它成为:

这是我的屏幕截图。

我尝试更改其他参数,例如 include_layeder_windows,但没有任何改变。 我的问题是 grab() returns 我的背景而不是我的屏幕。

您似乎在使用 Mac OS。在Mac中,默认情况下一个应用程序不能抓取其他应用程序window的内容。尝试这样做时,它只会抓取桌面背景。这也许可以观察到,例如共享屏幕时,例如缩放,没有给缩放适当的权限。

要解决此问题,您需要转到“系统偏好设置”>“隐私”>“隐私”>“屏幕录制”并在其中添加您的应用程序。