如何用PySimpleGUI选择CSV文件路径实现pandas读取与matplotlib绘图
解决方案
你只需要在PySimpleGUI触发Submit事件、拿到选中的文件路径后,直接将路径变量传给pd.read_csv,再衔接原有绘图逻辑即可,以下是完整可运行的合并代码,额外补充了异常校验避免报错:
import PySimpleGUI as sg import pandas as pd from matplotlib import pyplot as plt # GUI初始化 sg.theme("DarkTeal2") layout = [ [sg.T("")], [sg.Text("选择CSV文件: "), sg.Input(), sg.FileBrowse(key="-IN-", file_types=(("CSV文件", "*.csv"),))], [sg.Button("Submit")] ] window = sg.Window('CSV绘图工具', layout, size=(600,150)) while True: event, values = window.read() if event == sg.WIN_CLOSED or event=="Exit": break elif event == "Submit": file_path = values["-IN-"] # 校验是否选中文件 if not file_path.strip(): sg.popup_error("请先选择CSV文件!") continue # 读取CSV文件 try: ds = pd.read_csv(file_path) except Exception as e: sg.popup_error(f"读取CSV文件失败:{str(e)}") continue # 原有绘图逻辑 start_row = int(input('请输入起始时间(单位ms): ')) end_row =int(input('请输入结束时间(单位ms): ')) if start_row >= end_row: print("请输入大于起始时间的结束时间!") else: # 绘图 plt.plot(ds.iloc[start_row:(end_row+1)]) plt.xlabel('Milliseconds') plt.ylabel('TCMD') plt.grid() # 可自行修改保存路径,也可新增GUI组件选择保存路径 plt.savefig(r"plot_result.jpg") plt.show() # 输出统计信息 print(ds.iloc[start_row:(end_row+1)].describe()) window.close()
关键修改说明
- 你原有代码里打印的
values["-IN-"]就是用户选中的文件绝对路径,直接赋值给变量后传入pd.read_csv即可,不需要硬编码路径 - 新增了文件是否选中、CSV读取异常的校验逻辑,避免异常崩溃
- 完整保留了你原有的绘图、统计输出逻辑,原有功能完全不变
FileBrowse组件新增了file_types限制,仅能选择CSV文件,避免选错文件类型
如果不想使用命令行输入起止时间,也可以直接在GUI布局里加两个输入框,完全用GUI完成所有操作,修改后的布局参考:
layout = [ [sg.T("")], [sg.Text("选择CSV文件: "), sg.Input(), sg.FileBrowse(key="-IN-", file_types=(("CSV文件", "*.csv"),))], [sg.Text("起始时间(ms):"), sg.Input(key="-START-", size=(10,1))], [sg.Text("结束时间(ms):"), sg.Input(key="-END-", size=(10,1))], [sg.Button("Submit")]
触发Submit后直接通过values["-START-"]和values["-END-"]拿到时间数值即可,不需要再调用input()。
内容的提问来源于stack exchange,提问作者Srivatsan M
相关产品推荐
相关产品推荐

