Skip to content

Tkinter file selection dialog fails to pass selected file ending and append to file being saved #129460

@elkym

Description

@elkym

Bug report

Bug description:

import tkinter as tk
from tkinter import filedialog
import os

class FileDialogTest:
    def __init__(self, file_extensions):
        self.file_extensions = file_extensions
        self.selected_file_type = None

    def _format_file_extensions(self):
        return [(f"{ext} files", ext) for ext in self.file_extensions]

    def _get_file_type(self, file_path):
        _, ext = os.path.splitext(file_path)
        return ext

    def select_file_to_save(self, default_name="testfile"):
        root = tk.Tk()
        root.withdraw()
        file_path = filedialog.asksaveasfilename(
            title="Select a file to save",
            filetypes=self._format_file_extensions(),
            initialfile=default_name
        )
        if not file_path:
            raise FileNotFoundError("No file selected.")
        self.selected_file_type = self._get_file_type(file_path)
        if not self.selected_file_type:
            # Append the default extension based on the selected file type
            self.selected_file_type = self.file_extensions[0]  # Default to the first extension if none is selected
            file_path += self.selected_file_type
        return file_path, self.selected_file_type

# Define file extensions for testing
file_extensions = ['.txt', '.csv']

# Initialize FileDialogTest with file extensions
file_dialog_test = FileDialogTest(file_extensions)

# Test select_file_to_save method
try:
    file_path, selected_file_type = file_dialog_test.select_file_to_save()
    print(f"Selected file path: {file_path}")
    print(f"Selected file type: {selected_file_type}")
except FileNotFoundError as e:
    print(e)

CPython versions tested on:

3.11

Operating systems tested on:

Windows

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions