macOS下PySimpleGUI的file_types不生效 求多选PNG文件替代方案
macOS下PySimpleGUI的sg.FilesBrowse文件类型过滤失效解决方案
问题根因
- 原有代码中
file_types参数写法不符合规范,该参数要求传入列表嵌套元组格式的配置,每个元组第一个元素为文件类型描述,第二个为通配符匹配规则,正确写法示例为file_types=[("PNG图片文件", "*.png")] - 即使调整为正确写法,macOS环境下PySimpleGUI默认使用的Tkinter后端存在原生兼容性问题,文件类型过滤规则无法被系统文件选择对话框识别。
可行替代方案
方案1:无依赖修改,新增选择后过滤逻辑(最推荐)
不需要调整原有组件配置,在获取用户选择的文件路径后,手动过滤出PNG格式文件即可,修改后的代码示例如下:
# /usr/bin/python3 # -*- coding: utf-8 -*- import PySimpleGUI as sg def main(): layout = [ [sg.FilesBrowse(button_text='上传星系图片', key='_FILES_')], [sg.OK(), sg.Cancel()] ] window = sg.Window('预处理', layout, background_color='#1e1e1e') while True: event, values = window.read() if event in (None, 'Exit', 'Cancel'): break if event == 'OK': # 手动过滤PNG格式文件,兼容大小写后缀 all_selected = values['_FILES_'].split(';') png_files = [file_path for file_path in all_selected if file_path.lower().endswith('.png')] print(png_files) # 后续业务直接使用png_files变量即可 window.close() if __name__ == '__main__': main()
方案2:更换Qt后端,文件选择窗口直接生效过滤规则
如果需要在文件选择窗口层面就限制用户仅能选择PNG文件,可以更换PySimpleGUI的Qt后端,操作步骤如下:
- 安装依赖包:
pip install PySimpleGUIQt PySide6 - 将代码中的导入语句替换为
import PySimpleGUIQt as sg - 将
sg.FilesBrowse的参数补充为正确格式:sg.FilesBrowse(button_text='上传星系图片', file_types=[("PNG图片", "*.png")], key='_FILES_')
修改后文件类型过滤规则可在macOS下正常生效。
内容的提问来源于stack exchange,提问作者user16755372
相关产品推荐
相关产品推荐

