在tkinter中使用asksaveasfilename保存csv文件?

san*_*ace 3 python tkinter

我正在尝试创建一个tkinter应用程序,其中我们应该有一个可用于使用该filedialog.asksaveasfilename模块保存 csv 文件的条目。

到目前为止,我取得的成就如下所示,但还需要改进。请帮忙。

import matplotlib.pyplot as plt
import numpy as np
import tkinter as tk
from tkinter import ttk, messagebox, filedialog
import pandas as pd

win = tk.Tk()
win.title('Save')
win.geometry('200x150')


global save_status
save_status = False

def save_file(data, status):    
    global save_status
    save_status = status 

    if save_status:
         file_path = filedialog.asksaveasfilename(defaultextension=".csv",
                                            filetypes=[("csv file", ".csv")],
                                            )
         data.to_csv(file_path, sep = ";", index = False, decimal = ",")

    # wigets
    save_var = tk.BooleanVar(value = False) 
    save_check= ttk.Checkbutton(win, text = "Save Data", 
                 variable = save_var, onvalue = True, offvalue = False, width = 10)
    save_check.pack(side = "left", padx = 15, pady = 10)
    
    #  data 
    df = pd.DataFrame({"Age": [23, 35, 75], 
                      "Salary": [2000, 2500, 4000]})

    # save file according to status of checkbox
    save_file(df, save_var.get())

    win.mainloop()
Run Code Online (Sandbox Code Playgroud)

输出如下图所示。

在此输入图像描述

Xit*_*tiz 5

您可以这样做来询问文件名:

asksaveasfilename(filetypes = [('All tyes(*.*)', '*.*'),("csv file(*.csv)","*.csv")], defaultextension = [('All tyes(*.*)', '*.*'),("csv file(*.csv)","*.csv")])
Run Code Online (Sandbox Code Playgroud)

单击按钮时,您可以通过执行以下操作打开它:

from tkinter.filedialog import asksaveasfile
from tkinter import *

base = Tk()

def SaveFile():
   data = [('All tyes(*.*)', '*.*'),("csv file(*.csv)","*.csv")]
   file = asksaveasfilename(filetypes = data, defaultextension = data)
   # file will have file name provided by user.
   # Now we can use this file name to save file.
   with open(file,"w") as f:
      f.write(<data you want to save>)

save_btn = Button(base, text = 'Click to save file ', command = SaveFile)
save_btn.pack(side = TOP, pady = 20,padx = 50)

base.mainloop()
Run Code Online (Sandbox Code Playgroud)

filetypesdefaultextension必须提供的list of tuple元组内,您的第一个元素应该是用户看到的内容,第二个元素是实际的扩展名。

有关更多/详细信息,您可以阅读文档

Twistcsv :实际上,如果您尝试保存 csv 文件,您可以使用模块本身。还有其他库,但它简单易用,所以我建议它。这是基本示例:

import csv
with open('<file name.csv>', 'w', newline='') as csvfile:
    spamwriter = csv.writer(csvfile, delimiter=' ',
                            quotechar='|', quoting=csv.QUOTE_MINIMAL)
    spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
    spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])
Run Code Online (Sandbox Code Playgroud)