Skip to content

Commit 4b4bf5a

Browse files
committed
Add screenshot path handling to ExecEnv and update grab_save_window function
1 parent 64deae0 commit 4b4bf5a

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

guidata/env.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,13 @@ class ExecEnv:
3636
ACCEPT_DIALOGS_ARG = "accept_dialogs"
3737
VERBOSE_ARG = "verbose"
3838
SCREENSHOT_ARG = "screenshot"
39+
SCREENSHOT_PATH_ARG = "screenshot_path"
3940
DELAY_ARG = "delay"
4041
UNATTENDED_ENV = "GUIDATA_UNATTENDED"
4142
ACCEPT_DIALOGS_ENV = "GUIDATA_ACCEPT_DIALOGS"
4243
VERBOSE_ENV = "GUIDATA_VERBOSE"
4344
SCREENSHOT_ENV = "GUIDATA_SCREENSHOT"
45+
SCREENSHOT_PATH_ENV = "GUIDATA_SCREENSHOT_PATH"
4446
DELAY_ENV = "GUIDATA_DELAY"
4547

4648
def __init__(self):
@@ -131,6 +133,19 @@ def screenshot(self, value):
131133
"""Set screenshot value"""
132134
self.__set_mode(self.SCREENSHOT_ENV, value)
133135

136+
@property
137+
def screenshot_path(self):
138+
"""Get screenshot path"""
139+
return os.environ.get(self.SCREENSHOT_PATH_ENV, "")
140+
141+
@screenshot_path.setter
142+
def screenshot_path(self, value):
143+
"""Set screenshot path"""
144+
if value:
145+
os.environ[self.SCREENSHOT_PATH_ENV] = str(value)
146+
elif self.SCREENSHOT_PATH_ENV in os.environ:
147+
os.environ.pop(self.SCREENSHOT_PATH_ENV)
148+
134149
@property
135150
def verbose(self):
136151
"""Get verbosity level"""
@@ -178,6 +193,12 @@ def parse_args(self):
178193
help="automatic screenshots",
179194
default=None,
180195
)
196+
parser.add_argument(
197+
"--" + self.SCREENSHOT_PATH_ARG,
198+
type=str,
199+
help="path to save screenshots",
200+
default=None,
201+
)
181202
parser.add_argument(
182203
"--" + self.DELAY_ARG,
183204
type=int,
@@ -200,6 +221,7 @@ def set_env_from_args(self, args):
200221
self.UNATTENDED_ARG,
201222
self.ACCEPT_DIALOGS_ARG,
202223
self.SCREENSHOT_ARG,
224+
self.SCREENSHOT_PATH_ARG,
203225
self.VERBOSE_ARG,
204226
self.DELAY_ARG,
205227
):
@@ -252,6 +274,7 @@ def context(
252274
unattended=None,
253275
accept_dialogs=None,
254276
screenshot=None,
277+
screenshot_path=None,
255278
delay=None,
256279
verbose=None,
257280
) -> Generator[None, None, None]:
@@ -264,6 +287,7 @@ def context(
264287
unattended: whether to run in unattended mode
265288
accept_dialogs: whether to accept dialogs in unattended mode
266289
screenshot: whether to take screenshots
290+
screenshot_path: path to save screenshots
267291
delay: delay (ms) before quitting application in unattended mode
268292
verbose: verbosity level
269293
@@ -275,6 +299,7 @@ def context(
275299
"unattended": unattended,
276300
"accept_dialogs": accept_dialogs,
277301
"screenshot": screenshot,
302+
"screenshot_path": screenshot_path,
278303
"delay": delay,
279304
"verbose": verbose,
280305
}

guidata/qthelpers.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,8 @@ def grab_save_window(
745745
Args:
746746
widget: Widget to grab
747747
name: Widget name. If None, uses ``widget.objectName()``
748-
save_dir: Directory to save screenshot. If None, uses current working directory
748+
save_dir: Directory to save screenshot. If None, uses
749+
``execenv.screenshot_path`` or current working directory
749750
add_timestamp: Whether to add timestamp suffix to filename
750751
"""
751752
if name is None:
@@ -761,7 +762,8 @@ def grab_save_window(
761762
suffix = "_" + datetime.now().strftime("%Y-%m-%d-%H%M%S")
762763

763764
if save_dir is None:
764-
save_dir = os.getcwd()
765+
save_dir = execenv.screenshot_path or os.getcwd()
766+
os.makedirs(save_dir, exist_ok=True)
765767

766768
pixmap.save(osp.join(save_dir, f"{name}{suffix}.png"))
767769

0 commit comments

Comments
 (0)