es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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”:

enter image description here

La cual forma parte de mi fondo de pantalla.
Pero quiero que capture lo siguiente:

enter image description here

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.

Tags:  , ,

Answer

  1. Avatar for 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:

    im = ImageGrab.grab()
    

    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:

    im = ImageGrab.grab((x0, y0, x1, y1))
    

    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:

    from PIL import ImageGrab
    

Comments are closed.