如何使用asksaveasfile函数来定位我生成的绘图,以便用户可以为生成的绘图输入自定义文件名?我有其他功能设置来读取数据并生成绘图,但我想让它完成所有我的工作所需的GUI将打开一个窗口,通过用户输入保存生成的绘图而不是我 - 为生成的图表编码。
from tkinter import * # all modules imported, most remain unused atm
from tkinter import messagebox
from tkinter import ttk
from tkinter.filedialog import askopenfilename
from tkinter.filedialog import askopenfile
from tkinter.filedialog import asksaveasfile
import numpy as np
import matplotlib.pyplot as plt
from PIL import ImageTk
def UseData():
data1, data2 = OpenFile()
plt.figure(1)
plt.plot(data1, data2)
plt.title('Variable')
plt.ylabel('Some Units')
plt.xlabel('More Units')
plt.tight_layout()
result = messagebox.askyesno("Window-1", "Data processed. \nWould you like to save the figure?")
if result== True:
asksaveasfile(filetypes=(("PNG Image", "*.png"),("All Files", "*.*")),
defaultextension='.png', title="Window-2")
# a = 'picture.png'
# plt.savefig(a)
messagebox.showinfo("Window-3", "Plot Saved.") # Conf. message of saving
OpenFile函数可以很好地导入我感兴趣的数据,因此无关紧要。我遇到的问题是我在底部的if语句的一部分,它基本上包含A.)我想保存图的方式(通过asksaveasfile命令)和B.)硬编码文件名。是否有一种方法可以让所述命令针对已生成并保存的特定绘图?如果没有那么那很好,但我无法想办法让它发挥作用。
答案 0 :(得分:2)
使用asksaveasfilename
代替,因为它返回所选/创建文件的路径(如果可能,通过调用本机GUI,如果文件不存在,则允许创建文件)。所以你需要做的只是:
a = asksaveasfilename(filetypes=(("PNG Image", "*.png"),("All Files", "*.*")),
defaultextension='.png', title="Window-2")
plt.savefig(a)
但为了安全起见还要检查那个窗口后是否有文件名,因为用户可能会“取消”:
a = asksaveasfilename(filetypes=(("PNG Image", "*.png"),("All Files", "*.*")),
defaultextension='.png', title="Window-2")
if a:
plt.savefig(a)