Search code examples
pythonpython-3.xtkinterscreenshot

Take screenshot of python tkinter window (NOT entire computer screen)


I wish to take screenshot of python tkinter window (NOT the entire computer scrren). I applied following codes:

import pyautogui
import tkinter as tk

root= tk.Tk()

# Define tkinter window 
canvas1 = tk.Canvas(root, width = 300, height = 300)
canvas1.pack()

# Define fuction to take screenshot
def takeScreenshot ():
    
    myScreenshot = pyautogui.screenshot()
    myScreenshot.save('screenshot.png')


# Define fuction to take screenshot
myButton = tk.Button(text='Take Screenshot', command=takeScreenshot, bg='green',fg='white',font= 10)
canvas1.create_window(150, 150, window=myButton)

root.mainloop()

I wish to grab screenshot of only the window defined by "tk.Canvas(root, width = 300, height = 300)" But, I am capturing the entire screren.

Can somebody please let me know how do we go about this in python ?


Solution

  • You can get the region of the canvas and pass them to screenshot():

    def takeScreenshot():
        # get the region of the canvas
        x, y = canvas1.winfo_rootx(), canvas1.winfo_rooty()
        w, h = canvas1.winfo_width(), canvas1.winfo_height()
        pyautogui.screenshot('screenshot.png', region=(x, y, w, h))