PySimpleGUI/DemoPrograms/Demo_Save_Any_Window_As_Ima...

52 lines
1.9 KiB
Python
Raw Normal View History

import PySimpleGUI as sg
import win32gui
from PIL import ImageGrab
"""
Demo - Save Window screenshot
Works on WINDOWS only.
Saves a window as an image file. Tested saving as PNG and JPG. Input the title of the Window and it will be
saved in the format indicated by the filename.
2022-03-05 11:17:51 +00:00
Copyright 2020, 2022 PySimpleGUI.org
"""
# --------------------------------- Function to Save Window as JPG ---------------------------------
def save_win(filename=None, title=None):
"""
Saves a window with the title provided as a file using the provided filename.
If one of them is missing, then a window is created and the information collected
:param filename:
:param title:
:return:
"""
C = 7 # pixels to crop
if filename is None or title is None:
layout = [[sg.T('Choose window to save', font='Any 18')],
[sg.T('The extension you choose for filename will determine the image format')],
[sg.T('Window Title:', size=(12,1)), sg.I(title if title is not None else '', key='-T-')],
[sg.T('Filename:', size=(12,1)), sg.I(filename if filename is not None else '', key='-F-')],
[sg.Button('Ok', bind_return_key=True), sg.Button('Cancel')]]
event, values = sg.Window('Choose Win Title and Filename',layout).read(close=True)
if event != 'Ok': # if cancelled or closed the window
print('Cancelling the save')
return
filename, title = values['-F-'], values['-T-']
try:
fceuxHWND = win32gui.FindWindow(None, title)
rect = win32gui.GetWindowRect(fceuxHWND)
rect_cropped = (rect[0]+C, rect[1], rect[2]-C, rect[3]-C)
2022-03-05 11:17:51 +00:00
grab = ImageGrab.grab(bbox=rect_cropped)
grab.save(filename)
sg.popup('Wrote image to file:',filename)
except Exception as e:
sg.popup('Error trying to save screenshot file', e)
if __name__ == '__main__':
save_win()