Средство выбора файлов Python: методы и примеры кода для разных платформ

Чтобы создать средство выбора файлов в Python, вы можете использовать различные библиотеки и методы в зависимости от платформы, на которой вы работаете. Вот несколько методов с примерами кода для разных сценариев:

  1. Сборщик файлов на основе Tkinter (кроссплатформенный):

    from tkinter import Tk
    from tkinter.filedialog import askopenfilename
    root = Tk()
    root.withdraw()
    file_path = askopenfilename()
    print("Selected file:", file_path)
  2. Сборщик файлов PyQt (кроссплатформенный):

    from PyQt5.QtWidgets import QApplication, QFileDialog
    app = QApplication([])
    file_path, _ = QFileDialog.getOpenFileName(None, "Select File")
    print("Selected file:", file_path)
  3. Сборщик файлов wxPython (кроссплатформенный):

    import wx
    app = wx.App()
    file_dialog = wx.FileDialog(None, "Select File")
    if file_dialog.ShowModal() == wx.ID_OK:
    file_path = file_dialog.GetPath()
    print("Selected file:", file_path)
    file_dialog.Destroy()
  4. Встроенный инструмент выбора файлов macOS (только macOS):

    from AppKit import NSOpenPanel, NSApp
    def get_file_path():
    panel = NSOpenPanel.openPanel()
    panel.setCanChooseFiles_(True)
    panel.setCanChooseDirectories_(False)
    panel.setAllowsMultipleSelection_(False)
    
    if panel.runModal() == NSApp.presentError_:
        return None
    else:
        return panel.URL().path()
    file_path = get_file_path()
    print("Selected file:", file_path)
  5. Встроенное средство выбора файлов Windows (только Windows):

    import ctypes
    from ctypes import wintypes
    def get_file_path():
    COMDLG32 = ctypes.windll.shell32.GetModuleHandleW('comdlg32')
    if not COMDLG32:
        COMDLG32 = ctypes.windll.kernel32.LoadLibraryW('comdlg32')
    
    GetOpenFileName = ctypes.windll.comdlg32.GetOpenFileNameW
    GetOpenFileName.argtypes = [ctypes.POINTER(wintypes.OPENFILENAMEW)]
    GetOpenFileName.restype = wintypes.BOOL
    
    ofn = wintypes.OPENFILENAMEW()
    ofn.lpstrTitle = 'Select File'
    ofn.Flags = 0x00080000 | 0x00001000  # OFN_EXPLORER | OFN_PATHMUSTEXIST
    ofn.lpstrFile = ctypes.create_unicode_buffer(1024)
    ofn.nMaxFile = 1024
    
    if GetOpenFileName(ctypes.byref(ofn)):
        return ofn.lpstrFile.value
    else:
        return None
    file_path = get_file_path()
    print("Selected file:", file_path)

Эти примеры демонстрируют различные методы создания средств выбора файлов в Python для разных платформ. Выберите тот, который соответствует вашим потребностям и платформе. Не забудьте установить необходимые библиотеки, если вы еще этого не сделали.