You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:15:05