Skip to content

Commit c19378e

Browse files
Codexkujirahand
andauthored
feat: add files delimiter option to browse dialogs
Co-authored-by: kujirahand <2153829+kujirahand@users.noreply.github.com>
1 parent deec8b1 commit c19378e

4 files changed

Lines changed: 30 additions & 10 deletions

File tree

TkEasyGUI/dialogs.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -712,6 +712,7 @@ def popup_get_file(
712712
multiple_files: bool = False, # can select multiple files
713713
file_types: Optional[FileTypeList] = None,
714714
default_extension: Optional[str] = None,
715+
files_delimiter: Optional[str] = ";",
715716
# pylint: disable=unused-argument
716717
no_window: Optional[bool] = None, # for compatibility
717718
**kw,
@@ -779,6 +780,9 @@ def popup_get_file(
779780
multiple=multiple_files, # type: ignore
780781
**kw,
781782
)
783+
if multiple_files and isinstance(result, (tuple, list)):
784+
if files_delimiter is not None:
785+
result = files_delimiter.join(result)
782786
return result
783787

784788

TkEasyGUI/widgets.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4688,6 +4688,7 @@ def __init__(
46884688
save_as: bool = False,
46894689
enable_events: bool = False, # enable changing events
46904690
# other
4691+
files_delimiter: Optional[str] = ";",
46914692
metadata: Union[dict[str, Any], None] = None,
46924693
**kw,
46934694
) -> None:
@@ -4705,6 +4706,7 @@ def __init__(
47054706
self.save_as = save_as
47064707
self.multiple_files = multiple_files
47074708
self.initial_folder = initial_folder
4709+
self.files_delimiter = files_delimiter
47084710
self.props["text"] = button_text
47094711
self.enable_events = enable_events
47104712

@@ -4756,9 +4758,12 @@ def show_dialog(self, *args) -> Union[Any, None]:
47564758
save_as=self.save_as,
47574759
file_types=self.file_types,
47584760
multiple_files=self.multiple_files,
4761+
files_delimiter=self.files_delimiter,
47594762
)
47604763
if isinstance(result, (list, tuple)):
4761-
result = ";".join(result)
4764+
delimiter = self.files_delimiter
4765+
if delimiter is not None:
4766+
result = delimiter.join(result)
47624767
if (target is not None) and (result is not None) and (result != ""):
47634768
target.update(result) # type: ignore [call-arg]
47644769
if self.enable_events:
@@ -4791,20 +4796,25 @@ def __init__(
47914796
target_key: Union[str, None] = None,
47924797
title: str = "",
47934798
file_types: Optional[FileTypeList] = None,
4799+
files_delimiter: Optional[str] = "|",
47944800
enable_events: bool = False, # enable changing events
47954801
# other
47964802
metadata: Union[dict[str, Any], None] = None,
47974803
**kw,
47984804
) -> None:
47994805
"""Create a FilesBrowse element."""
4800-
super().__init__(button_text=button_text, key=key, metadata=metadata, **kw)
4801-
self.target_key = target_key
4802-
self.title = title
4803-
self.file_types = (
4804-
file_types if file_types is not None else [("All Files", "*.*")]
4806+
super().__init__(
4807+
button_text=button_text,
4808+
key=key,
4809+
target_key=target_key,
4810+
title=title,
4811+
file_types=file_types,
4812+
multiple_files=True,
4813+
files_delimiter=files_delimiter,
4814+
enable_events=enable_events,
4815+
metadata=metadata,
4816+
**kw,
48054817
)
4806-
self.props["text"] = button_text
4807-
self.enable_events = enable_events
48084818
# force set params
48094819
self.multiple_files = True
48104820
self.save_as = False

docs/TkEasyGUI/dialogs-py.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,12 +363,15 @@ def popup_get_file(
363363
multiple_files: bool = False, # can select multiple files
364364
file_types: Optional[FileTypeList] = None,
365365
default_extension: Optional[str] = None,
366+
files_delimiter: Optional[str] = ";",
366367
# pylint: disable=unused-argument
367368
no_window: Optional[bool] = None, # for compatibility
368369
**kw,
369370
) -> Union[str, tuple[str], None]:
370371
```
371372

373+
When selecting multiple files, the returned paths are joined using `files_delimiter` (default `";"`). Set `files_delimiter=None` to receive the raw tuple from the file dialog.
374+
372375
- [source](https://github.com/kujirahand/tkeasygui-python/blob/main/TkEasyGUI/dialogs.py#L707)
373376

374377
## popup_get_folder
@@ -852,4 +855,3 @@ def show_message(message: str, title: Optional[str] = None) -> None:
852855
```
853856

854857
- [source](https://github.com/kujirahand/tkeasygui-python/blob/main/TkEasyGUI/dialogs.py#L1587)
855-

docs/TkEasyGUI/widgets-py.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2866,12 +2866,15 @@ class FileBrowse(
28662866
initial_folder: Union[str, None] = None,
28672867
save_as: bool = False,
28682868
enable_events: bool = False, # enable changing events
2869+
files_delimiter: Optional[str] = ";",
28692870
# other
28702871
metadata: Union[dict[str, Any], None] = None,
28712872
**kw,
28722873
)
28732874
```
28742875

2876+
When `multiple_files` is enabled, selected paths are joined using `files_delimiter` (default `";"`).
2877+
28752878
- [source](https://github.com/kujirahand/tkeasygui-python/blob/main/TkEasyGUI/widgets.py#L4679)
28762879

28772880
### Methods of FileBrowse
@@ -3697,6 +3700,8 @@ class FilesBrowse(
36973700
)
36983701
```
36993702

3703+
Multiple file selections are returned as a single string joined by `files_delimiter` (default `"|"`).
3704+
37003705
- [source](https://github.com/kujirahand/tkeasygui-python/blob/main/TkEasyGUI/widgets.py#L4787)
37013706

37023707
### Methods of FilesBrowse
@@ -13644,4 +13649,3 @@ def valign_top(grid: list[list[Element]]) -> list[list[Element]]:
1364413649
```
1364513650

1364613651
- [source](https://github.com/kujirahand/tkeasygui-python/blob/main/TkEasyGUI/widgets.py#L5138)
13647-

0 commit comments

Comments
 (0)