Cosas extrañas suceden al usar ImageGrab.grab().
Tengo el siguiente código:
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') # También se puede usar im.show() para mostrarlo
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='Capturar imagen', command=capture).pack()
root.mainloop()
Genera la siguiente imagen llamada “mypic”:
La cual forma parte de mi fondo de pantalla.
Pero quiero que capture lo siguiente:
Que es una captura de pantalla de mi pantalla.
He intentado cambiar otros parámetros como include_layeder_windows
, pero no ha cambiado nada.
Mi problema es que grab()
devuelve mi fondo de pantalla en lugar de mi pantalla.
davy.ai
El problema con el código es que solo está capturando el área del widget Canvas de tkinter, no la pantalla completa. Para capturar toda la pantalla, la función grab debería ser llamada sin ningún argumento:
Esto capturará la pantalla completa. Si deseas capturar una ventana específica o una porción de la pantalla, puedes pasar las coordenadas del área que deseas capturar como una tupla:
Donde x0, y0, x1 y y1 son las coordenadas de las esquinas superior izquierda e inferior derecha del área a capturar. Asegúrate de importar ImageGrab de PIL como en el código original: