CTKFileDialog-plus 0.4.0__tar.gz → 0.5.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/PKG-INFO +9 -9
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/Dialog.py +109 -33
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/_functions.py +15 -13
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/PKG-INFO +9 -9
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/README.md +8 -8
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/pyproject.toml +1 -1
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/setup.py +1 -1
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/SOURCES.txt +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/dependency_links.txt +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/requires.txt +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/top_level.txt +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/Constants/__init__.py +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/Constants/constants.py +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/__init__.py +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/_system.py +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/bash.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/conf.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/css.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/exe.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/folder.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/gz.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/html.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/image.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/ini.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/javascript.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/js.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/json.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/markdown.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/odt.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/pdf.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/php.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/python.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/text.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/video.png +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/MANIFEST.in +0 -0
- {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: CTKFileDialog-plus
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: A modern file dialog for CustomTkinter
|
|
5
5
|
Home-page: https://github.com/hmidani-abdelilah/CTkFileDialog-plus
|
|
6
6
|
Author: abdelilah
|
|
@@ -61,10 +61,10 @@ python3 -m venv .venv
|
|
|
61
61
|
.\.venv\Scripts\activate.ps1 # In Powershell
|
|
62
62
|
pip3 install -r requirements.txt
|
|
63
63
|
|
|
64
|
-
# Or
|
|
64
|
+
# Or using pip
|
|
65
65
|
|
|
66
66
|
python3 -m venv .venv
|
|
67
|
-
source .venv/bin/activate # In
|
|
67
|
+
source .venv/bin/activate # In Powershell -> .\.venv\Scripts\activate.ps1
|
|
68
68
|
pip3 install CTkFileDialog-plus
|
|
69
69
|
|
|
70
70
|
```
|
|
@@ -195,11 +195,11 @@ ctk.set_appearance_mode("Dark")
|
|
|
195
195
|
ctk.set_default_color_theme("blue")
|
|
196
196
|
|
|
197
197
|
def save_as_file():
|
|
198
|
-
|
|
199
|
-
if
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
result_label.configure(text=f"File saved:\n{
|
|
198
|
+
f = asksaveasfile(autocomplete=True)
|
|
199
|
+
if f:
|
|
200
|
+
f.write("This file was created using the demo.")
|
|
201
|
+
f.close()
|
|
202
|
+
result_label.configure(text=f"File saved:\n{f.name}")
|
|
203
203
|
|
|
204
204
|
app = ctk.CTk()
|
|
205
205
|
app.title("asksaveasfile Demo")
|
|
@@ -320,7 +320,7 @@ root.mainloop()
|
|
|
320
320
|
|
|
321
321
|
## Mini Dialog
|
|
322
322
|
|
|
323
|
-
|
|
323
|
+
The mini dialog is a compact alternative to the Default dialog. It does not support `tooltip`, `preview_img`, or `video_preview`.
|
|
324
324
|
|
|
325
325
|
## 🌙 Dark Mode Preview
|
|
326
326
|
|
|
@@ -212,26 +212,17 @@ class _DrawApp():
|
|
|
212
212
|
|
|
213
213
|
# If it's a file and we're in save-as mode
|
|
214
214
|
if self.method in ['asksaveasfile', 'asksaveasfilename']:
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
message='This file exists. Do you want to overwrite it?',
|
|
218
|
-
icon='warning',
|
|
219
|
-
title='Warning',
|
|
220
|
-
option_1='Yes',
|
|
221
|
-
option_2='No'
|
|
222
|
-
)
|
|
223
|
-
if msg.get() == 'No':
|
|
224
|
-
return
|
|
215
|
+
# In save-as mode, we just select the file path
|
|
216
|
+
# The file will be created/overwritten when user confirms
|
|
225
217
|
self._temp_item = path
|
|
226
|
-
self.
|
|
218
|
+
self.update_entry(path)
|
|
227
219
|
return
|
|
228
220
|
|
|
229
221
|
if self.method == 'askopenfile':
|
|
230
222
|
if not os.path.isfile(path):
|
|
231
|
-
|
|
232
223
|
CTkMessagebox(message='File not found!', title='Error', icon='cancel')
|
|
233
224
|
self.PathEntry.delete(0, ctk.END)
|
|
234
|
-
self.PathEntry.insert(0, self.current_path)
|
|
225
|
+
self.PathEntry.insert(0, str(self.current_path))
|
|
235
226
|
return
|
|
236
227
|
|
|
237
228
|
self._temp_item = path
|
|
@@ -251,38 +242,104 @@ class _DrawApp():
|
|
|
251
242
|
return
|
|
252
243
|
|
|
253
244
|
except PermissionError:
|
|
254
|
-
|
|
255
245
|
CTkMessagebox(message='Permission denied!', title='Error', icon='cancel')
|
|
256
|
-
except FileNotFoundError:
|
|
257
|
-
|
|
246
|
+
except FileNotFoundError:
|
|
258
247
|
CTkMessagebox(message='File Not Found!', title='Error', icon='cancel')
|
|
259
248
|
|
|
260
249
|
def close_app(self):
|
|
250
|
+
# Handle save-as filename dialog
|
|
261
251
|
if self.method == 'asksaveasfilename':
|
|
262
|
-
|
|
252
|
+
path = self.PathEntry.get().strip()
|
|
253
|
+
if not path:
|
|
254
|
+
CTkMessagebox(message='Please enter a filename!', title='Error', icon='cancel')
|
|
255
|
+
return
|
|
256
|
+
|
|
257
|
+
# Check if it's a valid path
|
|
258
|
+
path = os.path.abspath(os.path.expanduser(os.path.expandvars(path)))
|
|
259
|
+
|
|
260
|
+
# Don't allow directories as filenames
|
|
261
|
+
if os.path.isdir(path):
|
|
262
|
+
CTkMessagebox(message='A directory with this name exists. Please enter a filename.', title='Error', icon='cancel')
|
|
263
|
+
return
|
|
264
|
+
|
|
265
|
+
# Check if file exists and ask for confirmation
|
|
266
|
+
if os.path.exists(path):
|
|
267
|
+
msg = CTkMessagebox(
|
|
268
|
+
message='This file already exists. Do you want to overwrite it?',
|
|
269
|
+
icon='warning',
|
|
270
|
+
title='File Exists',
|
|
271
|
+
option_1='Yes',
|
|
272
|
+
option_2='No'
|
|
273
|
+
)
|
|
274
|
+
if msg.get() == 'No':
|
|
275
|
+
return
|
|
276
|
+
|
|
277
|
+
self.selected_file = path
|
|
278
|
+
self.protocol_windows()
|
|
279
|
+
self.app.destroy()
|
|
280
|
+
return
|
|
281
|
+
|
|
282
|
+
# Handle save-as file dialog
|
|
283
|
+
if self.method == 'asksaveasfile':
|
|
284
|
+
path = self.PathEntry.get().strip()
|
|
285
|
+
if not path:
|
|
286
|
+
CTkMessagebox(message='Please enter a filename!', title='Error', icon='cancel')
|
|
287
|
+
return
|
|
288
|
+
|
|
289
|
+
path = os.path.abspath(os.path.expanduser(os.path.expandvars(path)))
|
|
290
|
+
|
|
291
|
+
if os.path.isdir(path):
|
|
292
|
+
CTkMessagebox(message='A directory with this name exists. Please enter a filename.', title='Error', icon='cancel')
|
|
293
|
+
return
|
|
294
|
+
|
|
295
|
+
if os.path.exists(path):
|
|
296
|
+
msg = CTkMessagebox(
|
|
297
|
+
message='This file already exists. Do you want to overwrite it?',
|
|
298
|
+
icon='warning',
|
|
299
|
+
title='File Exists',
|
|
300
|
+
option_1='Yes',
|
|
301
|
+
option_2='No'
|
|
302
|
+
)
|
|
303
|
+
if msg.get() == 'No':
|
|
304
|
+
return
|
|
305
|
+
|
|
306
|
+
self.selected_file = path
|
|
307
|
+
self.protocol_windows()
|
|
308
|
+
self.app.destroy()
|
|
309
|
+
return
|
|
263
310
|
|
|
264
|
-
|
|
265
|
-
|
|
311
|
+
# Handle single file open
|
|
312
|
+
if self.method == 'askopenfile':
|
|
313
|
+
if not self._temp_item:
|
|
314
|
+
CTkMessagebox(message='Please select a file!', title='Error', icon='cancel')
|
|
315
|
+
return
|
|
316
|
+
|
|
317
|
+
self.selected_file = self._temp_item
|
|
318
|
+
self.protocol_windows()
|
|
266
319
|
self.app.destroy()
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
self.selected_file = self._temp_item
|
|
320
|
+
return
|
|
321
|
+
|
|
322
|
+
# Handle single file/directory selection
|
|
323
|
+
if self.method in ['askopenfilename', 'askdirectory']:
|
|
324
|
+
if not self._temp_item:
|
|
325
|
+
CTkMessagebox(message='Please select a file or directory!', title='Error', icon='cancel')
|
|
274
326
|
return
|
|
327
|
+
|
|
328
|
+
self.selected_file = self._temp_item
|
|
329
|
+
self.protocol_windows()
|
|
330
|
+
self.app.destroy()
|
|
331
|
+
return
|
|
275
332
|
|
|
333
|
+
# Handle multiple files selection
|
|
276
334
|
if len(self._temp_items) >= 1:
|
|
277
335
|
self.protocol_windows()
|
|
278
336
|
self.app.destroy()
|
|
279
|
-
if self.method
|
|
337
|
+
if self.method in ["askopenfilenames", "askopenfiles"]:
|
|
280
338
|
seen = set()
|
|
281
339
|
self.selected_objects = [
|
|
282
340
|
f for f in self._temp_items
|
|
283
341
|
if not os.path.isdir(f) and f not in seen and not seen.add(f)
|
|
284
342
|
]
|
|
285
|
-
|
|
286
343
|
return
|
|
287
344
|
|
|
288
345
|
|
|
@@ -587,8 +644,12 @@ class _DrawApp():
|
|
|
587
644
|
hover_color="#8da3ae",
|
|
588
645
|
text_color="#000000" if self.current_theme.lower() == 'light' else '#cccccc',
|
|
589
646
|
)
|
|
590
|
-
if os.path.isdir(r):
|
|
647
|
+
if os.path.isdir(r):
|
|
591
648
|
self.navigate_to(path=r, master=master)
|
|
649
|
+
elif self.method in ['asksaveasfile', 'asksaveasfilename']:
|
|
650
|
+
# In save-as mode, select the file (don't navigate)
|
|
651
|
+
self._temp_item = r
|
|
652
|
+
self.update_entry(r)
|
|
592
653
|
else:
|
|
593
654
|
self._temp_items.append(r)
|
|
594
655
|
|
|
@@ -1317,13 +1378,20 @@ class _MiniDialog():
|
|
|
1317
1378
|
path = os.path.join(self.initial_dir, path)
|
|
1318
1379
|
|
|
1319
1380
|
if self.method in ['asksaveasfile', 'asksaveasfilename']:
|
|
1320
|
-
|
|
1381
|
+
# Validate filename
|
|
1382
|
+
if not path:
|
|
1383
|
+
CTkMessagebox(message='Please enter a filename!', title='Error', icon='cancel')
|
|
1384
|
+
return
|
|
1385
|
+
|
|
1386
|
+
if os.path.isdir(path):
|
|
1387
|
+
CTkMessagebox(message='A directory with this name exists. Please enter a filename.', title='Error', icon='cancel')
|
|
1321
1388
|
return
|
|
1322
1389
|
|
|
1323
|
-
if
|
|
1390
|
+
# Check if file exists and ask for confirmation
|
|
1391
|
+
if os.path.exists(path):
|
|
1324
1392
|
opts = CTkMessagebox(
|
|
1325
|
-
message='This file already exists
|
|
1326
|
-
title='
|
|
1393
|
+
message='This file already exists. Do you want to overwrite it?',
|
|
1394
|
+
title='File Exists',
|
|
1327
1395
|
icon='warning',
|
|
1328
1396
|
option_1='Yes',
|
|
1329
1397
|
option_2='No'
|
|
@@ -1373,6 +1441,10 @@ class _MiniDialog():
|
|
|
1373
1441
|
idx = items.index(selected_item)
|
|
1374
1442
|
if hasattr(self, 'absolute_paths') and idx < len(self.absolute_paths):
|
|
1375
1443
|
self.selected_item = self.absolute_paths[idx]
|
|
1444
|
+
|
|
1445
|
+
# For save-as dialogs, update the path entry with selected file
|
|
1446
|
+
if self.method in ['asksaveasfile', 'asksaveasfilename']:
|
|
1447
|
+
self.update_entry(self.selected_item)
|
|
1376
1448
|
except (ValueError, IndexError):
|
|
1377
1449
|
pass
|
|
1378
1450
|
|
|
@@ -1396,6 +1468,10 @@ class _MiniDialog():
|
|
|
1396
1468
|
# If it's a file:
|
|
1397
1469
|
self.path_entry.delete(0, ctk.END)
|
|
1398
1470
|
self.path_entry.insert(0, self.selected_item)
|
|
1471
|
+
|
|
1472
|
+
# For files in open mode, auto-select and return
|
|
1473
|
+
if self.method in ['askopenfile', 'askopenfilename']:
|
|
1474
|
+
self._on_select()
|
|
1399
1475
|
|
|
1400
1476
|
|
|
1401
1477
|
def _up(self):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env python
|
|
2
2
|
from .Dialog import _DrawApp, _MiniDialog, Optional, List
|
|
3
|
-
from typing import Tuple, Literal
|
|
3
|
+
from typing import Tuple, Literal, TextIO
|
|
4
4
|
from typeguard import typechecked
|
|
5
5
|
|
|
6
6
|
@typechecked
|
|
@@ -112,7 +112,7 @@ def askopenfilenames(style: Literal['Default', 'Mini'] = 'Default',
|
|
|
112
112
|
tool_tip: bool = False,
|
|
113
113
|
geometry: Tuple[str, str] = ('1320x720', '500x400'),
|
|
114
114
|
title: str = 'CTkFileDialog',
|
|
115
|
-
) -> tuple[str] | None:
|
|
115
|
+
) -> tuple[str, ...] | None:
|
|
116
116
|
"""
|
|
117
117
|
Displays a file dialog for multiple file selection.
|
|
118
118
|
|
|
@@ -133,15 +133,16 @@ def askopenfilenames(style: Literal['Default', 'Mini'] = 'Default',
|
|
|
133
133
|
title: Define the title from the app, default will be "CTkFileDialog"
|
|
134
134
|
|
|
135
135
|
Returns:
|
|
136
|
-
tuple[str]: Tuple of selected file paths, or None if canceled
|
|
136
|
+
tuple[str, ...]: Tuple of selected file paths, or None if canceled
|
|
137
137
|
|
|
138
138
|
Example:
|
|
139
139
|
>>> selected_files = askopenfilenames(
|
|
140
140
|
... filetypes=['.py', '.md'],
|
|
141
141
|
... preview_img=True
|
|
142
142
|
... )
|
|
143
|
-
>>>
|
|
144
|
-
...
|
|
143
|
+
>>> if selected_files:
|
|
144
|
+
... for file in selected_files:
|
|
145
|
+
... process_file(file)
|
|
145
146
|
"""
|
|
146
147
|
|
|
147
148
|
if style == 'Default':
|
|
@@ -220,7 +221,7 @@ def asksaveasfile(style: Literal['Default', 'Mini'] = 'Default',
|
|
|
220
221
|
geometry: Tuple[str, str] = ('1320x720', '500x400'),
|
|
221
222
|
title: str = 'CTkFileDialog',
|
|
222
223
|
**kwargs,
|
|
223
|
-
):
|
|
224
|
+
) -> TextIO | None:
|
|
224
225
|
"""
|
|
225
226
|
Displays a save dialog and returns an open file object.
|
|
226
227
|
|
|
@@ -243,12 +244,13 @@ def asksaveasfile(style: Literal['Default', 'Mini'] = 'Default',
|
|
|
243
244
|
**kwargs: Additional arguments passed to open()
|
|
244
245
|
|
|
245
246
|
Returns:
|
|
246
|
-
|
|
247
|
+
TextIO: Open file object in the specified mode, or None if canceled
|
|
247
248
|
|
|
248
249
|
Example:
|
|
249
|
-
>>>
|
|
250
|
-
|
|
251
|
-
...
|
|
250
|
+
>>> f = asksaveasfile(mode='w', filetypes=['.jpeg', '.jpg', '.mp4'])
|
|
251
|
+
>>> if f: # Check if not canceled
|
|
252
|
+
... f.write("Log entry\\n")
|
|
253
|
+
... f.close()
|
|
252
254
|
"""
|
|
253
255
|
if style == 'Default':
|
|
254
256
|
app = _DrawApp(filetypes=filetypes, current_path=initial_dir, hidden=hidden, preview_img=preview_img, method='asksaveasfile', autocomplete=autocomplete, video_preview=video_preview, tool_tip=tool_tip, geometry=geometry[0], title=title)
|
|
@@ -272,7 +274,7 @@ def askopenfile(style: Literal['Mini', 'Default'] = 'Default',
|
|
|
272
274
|
geometry: Tuple[str, str] = ('1320x720', '500x400'),
|
|
273
275
|
title: str = 'CTkFileDialog',
|
|
274
276
|
**kwargs,
|
|
275
|
-
):
|
|
277
|
+
) -> TextIO | None:
|
|
276
278
|
"""
|
|
277
279
|
Displays an open file dialog and returns an open file object.
|
|
278
280
|
|
|
@@ -326,7 +328,7 @@ def askopenfiles(style: Literal['Default', 'Mini'] = 'Default',
|
|
|
326
328
|
geometry: Tuple[str, str] = ('1320x720', '500x400'),
|
|
327
329
|
title: str = 'CTkFileDialog',
|
|
328
330
|
**kwargs,
|
|
329
|
-
):
|
|
331
|
+
) -> tuple[TextIO, ...] | None:
|
|
330
332
|
"""
|
|
331
333
|
Displays a multi-file open dialog and returns multiple open file objects.
|
|
332
334
|
|
|
@@ -352,7 +354,7 @@ def askopenfiles(style: Literal['Default', 'Mini'] = 'Default',
|
|
|
352
354
|
tuple[TextIOWrapper]: Tuple of open file objects, or None if canceled
|
|
353
355
|
|
|
354
356
|
Example:
|
|
355
|
-
>>> files = askopenfiles(mode='r', filetypes=[".txt"
|
|
357
|
+
>>> files = askopenfiles(mode='r', filetypes=[".txt"])
|
|
356
358
|
>>> if files:
|
|
357
359
|
... for f in files:
|
|
358
360
|
... print(f.read())
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: CTKFileDialog-plus
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.1
|
|
4
4
|
Summary: A modern file dialog for CustomTkinter
|
|
5
5
|
Home-page: https://github.com/hmidani-abdelilah/CTkFileDialog-plus
|
|
6
6
|
Author: abdelilah
|
|
@@ -61,10 +61,10 @@ python3 -m venv .venv
|
|
|
61
61
|
.\.venv\Scripts\activate.ps1 # In Powershell
|
|
62
62
|
pip3 install -r requirements.txt
|
|
63
63
|
|
|
64
|
-
# Or
|
|
64
|
+
# Or using pip
|
|
65
65
|
|
|
66
66
|
python3 -m venv .venv
|
|
67
|
-
source .venv/bin/activate # In
|
|
67
|
+
source .venv/bin/activate # In Powershell -> .\.venv\Scripts\activate.ps1
|
|
68
68
|
pip3 install CTkFileDialog-plus
|
|
69
69
|
|
|
70
70
|
```
|
|
@@ -195,11 +195,11 @@ ctk.set_appearance_mode("Dark")
|
|
|
195
195
|
ctk.set_default_color_theme("blue")
|
|
196
196
|
|
|
197
197
|
def save_as_file():
|
|
198
|
-
|
|
199
|
-
if
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
result_label.configure(text=f"File saved:\n{
|
|
198
|
+
f = asksaveasfile(autocomplete=True)
|
|
199
|
+
if f:
|
|
200
|
+
f.write("This file was created using the demo.")
|
|
201
|
+
f.close()
|
|
202
|
+
result_label.configure(text=f"File saved:\n{f.name}")
|
|
203
203
|
|
|
204
204
|
app = ctk.CTk()
|
|
205
205
|
app.title("asksaveasfile Demo")
|
|
@@ -320,7 +320,7 @@ root.mainloop()
|
|
|
320
320
|
|
|
321
321
|
## Mini Dialog
|
|
322
322
|
|
|
323
|
-
|
|
323
|
+
The mini dialog is a compact alternative to the Default dialog. It does not support `tooltip`, `preview_img`, or `video_preview`.
|
|
324
324
|
|
|
325
325
|
## 🌙 Dark Mode Preview
|
|
326
326
|
|
|
@@ -42,10 +42,10 @@ python3 -m venv .venv
|
|
|
42
42
|
.\.venv\Scripts\activate.ps1 # In Powershell
|
|
43
43
|
pip3 install -r requirements.txt
|
|
44
44
|
|
|
45
|
-
# Or
|
|
45
|
+
# Or using pip
|
|
46
46
|
|
|
47
47
|
python3 -m venv .venv
|
|
48
|
-
source .venv/bin/activate # In
|
|
48
|
+
source .venv/bin/activate # In Powershell -> .\.venv\Scripts\activate.ps1
|
|
49
49
|
pip3 install CTkFileDialog-plus
|
|
50
50
|
|
|
51
51
|
```
|
|
@@ -176,11 +176,11 @@ ctk.set_appearance_mode("Dark")
|
|
|
176
176
|
ctk.set_default_color_theme("blue")
|
|
177
177
|
|
|
178
178
|
def save_as_file():
|
|
179
|
-
|
|
180
|
-
if
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
result_label.configure(text=f"File saved:\n{
|
|
179
|
+
f = asksaveasfile(autocomplete=True)
|
|
180
|
+
if f:
|
|
181
|
+
f.write("This file was created using the demo.")
|
|
182
|
+
f.close()
|
|
183
|
+
result_label.configure(text=f"File saved:\n{f.name}")
|
|
184
184
|
|
|
185
185
|
app = ctk.CTk()
|
|
186
186
|
app.title("asksaveasfile Demo")
|
|
@@ -301,7 +301,7 @@ root.mainloop()
|
|
|
301
301
|
|
|
302
302
|
## Mini Dialog
|
|
303
303
|
|
|
304
|
-
|
|
304
|
+
The mini dialog is a compact alternative to the Default dialog. It does not support `tooltip`, `preview_img`, or `video_preview`.
|
|
305
305
|
|
|
306
306
|
## 🌙 Dark Mode Preview
|
|
307
307
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "CTKFileDialog-plus"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.5.1"
|
|
8
8
|
description = "A modern file dialog for CustomTkinter"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
authors = [{name="abdelilah", email="hmidaniabdelilah92@gmail.com"}]
|
|
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|
|
2
2
|
|
|
3
3
|
setup(
|
|
4
4
|
name="CTkFileDialog-plus",
|
|
5
|
-
version="0.
|
|
5
|
+
version="0.5.1", # bump for each release
|
|
6
6
|
author="abdelilah",
|
|
7
7
|
author_email="hmidaniabdelilah92@gmail.com",
|
|
8
8
|
description="A modern file dialog for CustomTkinter",
|
{ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/requires.txt
RENAMED
|
File without changes
|
{ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|