簡體   English   中英

ImageGrab.grab 不是獲取 tkinter 窗口的小部件,而是獲取其下的屏幕區域

[英]ImageGrab.grab not get widget of tkinter window, but screen area under it

嘗試通過以下代碼在 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) 已經嘗試過方法updateupdate_idletasks ,都得到了相同的結果。

是否有任何方法可以立即完成 tkinter 窗口? 所以我不需要每次都睡一秒鍾來捕捉小部件的圖像。 或者我走錯了路,歡迎提出任何建議。

很明顯吧? 顯示窗口需要一些時間,但屏幕截圖很快就會被捕獲。 我有什么建議? 把它放在一個函數中,並after這里利用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM