我正在尝试创建一个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)
输出如下图所示。
您可以这样做来询问文件名:
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)
在filetypes您defaultextension必须提供的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)