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.
Files changed (36) hide show
  1. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/PKG-INFO +9 -9
  2. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/Dialog.py +109 -33
  3. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/_functions.py +15 -13
  4. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/PKG-INFO +9 -9
  5. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/README.md +8 -8
  6. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/pyproject.toml +1 -1
  7. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/setup.py +1 -1
  8. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/SOURCES.txt +0 -0
  9. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/dependency_links.txt +0 -0
  10. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/requires.txt +0 -0
  11. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTKFileDialog_plus.egg-info/top_level.txt +0 -0
  12. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/Constants/__init__.py +0 -0
  13. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/Constants/constants.py +0 -0
  14. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/__init__.py +0 -0
  15. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/_system.py +0 -0
  16. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/bash.png +0 -0
  17. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/conf.png +0 -0
  18. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/css.png +0 -0
  19. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/exe.png +0 -0
  20. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/folder.png +0 -0
  21. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/gz.png +0 -0
  22. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/html.png +0 -0
  23. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/image.png +0 -0
  24. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/ini.png +0 -0
  25. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/javascript.png +0 -0
  26. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/js.png +0 -0
  27. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/json.png +0 -0
  28. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/markdown.png +0 -0
  29. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/odt.png +0 -0
  30. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/pdf.png +0 -0
  31. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/php.png +0 -0
  32. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/python.png +0 -0
  33. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/text.png +0 -0
  34. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/CTkFileDialog/icons/video.png +0 -0
  35. {ctkfiledialog_plus-0.4.0 → ctkfiledialog_plus-0.5.1}/MANIFEST.in +0 -0
  36. {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.4.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 ussing pip
64
+ # Or using pip
65
65
 
66
66
  python3 -m venv .venv
67
- source .venv/bin/activate # In powershell -> .\.venv\Scripts\activate.ps1
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
- file = asksaveasfile(autocomplete=True)
199
- if file:
200
- file.write("This file was created using the demo.")
201
- file.close()
202
- result_label.configure(text=f"File saved:\n{file.name}")
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
- This is a parameter of the file dialog, but it's more powerful than the default one. As I mentioned earlier, it doesn't support parameters like tooltip, preview_img, or video_preview.
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
- if os.path.isfile(path):
216
- msg = CTkMessagebox(
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.close_app()
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
- if not os.path.isdir(self.PathEntry.get()): self.selected_file = self.PathEntry.get()
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
- if self._temp_item:
265
- self.protocol_windows()
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
- if self.method == 'asksaveasfile':
268
- self.selected_file = self._temp_item
269
- return
270
- elif self.method == 'askopenfile':
271
- self.selected_file = self._temp_item
272
- else:
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 == "askopenfilenames" or self.method == "askopenfiles":
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
- if not path or os.path.isdir(path):
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 os.path.exists(path) and self._extra_method != 'askopenfile':
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! Do you want to overwrite it?',
1326
- title='Error',
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
- >>> for file in selected_files:
144
- ... process_file(file)
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
- TextIOWrapper: Open file object in write mode, or None if canceled
247
+ TextIO: Open file object in the specified mode, or None if canceled
247
248
 
248
249
  Example:
249
- >>> with asksaveasfile(mode='w', filetypes=['.jpeg', 'jpg', 'mp4'] as f:
250
- ... if f: # Check if not canceled
251
- ... f.write("Log entry\\n")
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.4.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 ussing pip
64
+ # Or using pip
65
65
 
66
66
  python3 -m venv .venv
67
- source .venv/bin/activate # In powershell -> .\.venv\Scripts\activate.ps1
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
- file = asksaveasfile(autocomplete=True)
199
- if file:
200
- file.write("This file was created using the demo.")
201
- file.close()
202
- result_label.configure(text=f"File saved:\n{file.name}")
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
- This is a parameter of the file dialog, but it's more powerful than the default one. As I mentioned earlier, it doesn't support parameters like tooltip, preview_img, or video_preview.
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 ussing pip
45
+ # Or using pip
46
46
 
47
47
  python3 -m venv .venv
48
- source .venv/bin/activate # In powershell -> .\.venv\Scripts\activate.ps1
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
- file = asksaveasfile(autocomplete=True)
180
- if file:
181
- file.write("This file was created using the demo.")
182
- file.close()
183
- result_label.configure(text=f"File saved:\n{file.name}")
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
- This is a parameter of the file dialog, but it's more powerful than the default one. As I mentioned earlier, it doesn't support parameters like tooltip, preview_img, or video_preview.
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.4.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.4.0", # bump for each release
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",