Skip to content

Commit a751788

Browse files
committed
Merge branch 'main' of github.com:kujirahand/tkeasygui-python
2 parents 08c2b86 + 6b44641 commit a751788

4 files changed

Lines changed: 41 additions & 14 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: 28 additions & 12 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,15 +4758,24 @@ 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
)
4760-
if isinstance(result, (list, tuple)):
4761-
result = ";".join(result)
4762-
if (target is not None) and (result is not None) and (result != ""):
4763-
target.update(result) # type: ignore [call-arg]
4763+
target_value = result
4764+
if isinstance(target_value, (list, tuple)):
4765+
delimiter = self.files_delimiter
4766+
if delimiter is not None:
4767+
target_value = delimiter.join(str(item) for item in target_value)
4768+
else:
4769+
# Keep popup_get_file return value unchanged (tuple/list) while
4770+
# updating target widgets/events with a readable string.
4771+
fallback_delimiter = " "
4772+
target_value = fallback_delimiter.join(str(item) for item in target_value)
4773+
if (target is not None) and (target_value is not None) and (target_value != ""):
4774+
target.update(target_value) # type: ignore [call-arg]
47644775
if self.enable_events:
47654776
if (self.window is not None) and (self.key is not None):
47664777
self.window.dispatch_event(
4767-
self.key, {"event": result, "event_type": "change"}
4778+
self.key, {"event": target_value, "event_type": "change"}
47684779
)
47694780

47704781
return result
@@ -4791,20 +4802,25 @@ def __init__(
47914802
target_key: Union[str, None] = None,
47924803
title: str = "",
47934804
file_types: Optional[FileTypeList] = None,
4805+
files_delimiter: Optional[str] = "|",
47944806
enable_events: bool = False, # enable changing events
47954807
# other
47964808
metadata: Union[dict[str, Any], None] = None,
47974809
**kw,
47984810
) -> None:
47994811
"""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", "*.*")]
4812+
super().__init__(
4813+
button_text=button_text,
4814+
key=key,
4815+
target_key=target_key,
4816+
title=title,
4817+
file_types=file_types,
4818+
multiple_files=True,
4819+
files_delimiter=files_delimiter,
4820+
enable_events=enable_events,
4821+
metadata=metadata,
4822+
**kw,
48054823
)
4806-
self.props["text"] = button_text
4807-
self.enable_events = enable_events
48084824
# force set params
48094825
self.multiple_files = True
48104826
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: 6 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
@@ -3690,13 +3693,16 @@ class FilesBrowse(
36903693
target_key: Union[str, None] = None,
36913694
title: str = "",
36923695
file_types: Optional[FileTypeList] = None,
3696+
files_delimiter: Optional[str] = "|",
36933697
enable_events: bool = False, # enable changing events
36943698
# other
36953699
metadata: Union[dict[str, Any], None] = None,
36963700
**kw,
36973701
)
36983702
```
36993703

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

37023708
### Methods of FilesBrowse
@@ -13644,4 +13650,3 @@ def valign_top(grid: list[list[Element]]) -> list[list[Element]]:
1364413650
```
1364513651

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

0 commit comments

Comments
 (0)