如何解决ImageGrab.grab 不获取 tkinter 窗口的小部件,而是获取其下的屏幕区域
尝试通过以下代码在 tkinter 窗口中捕获小部件的图像,但只获取 tkinter 窗口下的屏幕区域。
import ctypes
import platform
from time import sleep
import tkinter as tk
from PIL import ImageGrab
if platform.system() == "Windows" and platform.release() == "10":
ctypes.windll.shcore.SetProcessDpiAwareness(1)
root = tk.Tk()
root.geometry("+0+0")
var = tk.StringVar()
var.set("Hello World")
entry = tk.Entry(root,width=40,bg='green',takefocus=False,textvariable=var)
entry.pack()
root.update()
# sleep(1)
x,y = entry.winfo_rootx(),entry.winfo_rooty()
width,height = entry.winfo_width(),entry.winfo_height()
im = ImageGrab.grab(bBox=(x,y,x+width,y+height)) # Grab image on screen
im.show()
root.mainloop()
如果行 # sleep(1)
替换为 sleep(1)
就可以了。已尝试方法 update
或 update_idletasks
,都得到相同的结果。
是否有任何方法可以立即完成 tkinter 窗口?所以我不需要每次都睡一秒钟来捕捉小部件的图像。或者我走错了路,欢迎提出任何建议。
解决方法
很明显吧?显示窗口需要一些时间,但屏幕截图很快就会被捕获。我有什么建议?将其放在函数中并利用此处的 after
方法。
def screenshot():
im = ImageGrab.grab(bbox=(x,y,x+width,y+height)) # Grab image on screen
im.show()
root.after(1000,screenshot) # Depending on the time required to take show the window
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。