如何使用 Tkinter 的 asksaveasfile 函数定位生成的绘图进行保存?

Cas*_*oup 3 python tkinter

如何使用 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
Run Code Online (Sandbox Code Playgroud)

OpenFile 函数非常适合导入我感兴趣的数据,因此不用担心。我遇到的问题是我在底部的 if 语句的一部分,它基本上包含 A。)我想保存绘图的方式(通过 asksaveasfile 命令)和 B。)在 a 中进行硬编码文档名称。有没有办法让所述命令针对已生成的特定图并保存它?如果没有,那很好,但我想不出办法让它发挥作用。

Nae*_*Nae 5

asksaveasfilename改为使用,因为它返回所选/创建的文件的路径(如果可能,通过调用本机 GUI,如果文件不存在,则允许创建文件)。所以你需要做的很简单:

a = asksaveasfilename(filetypes=(("PNG Image", "*.png"),("All Files", "*.*")), 
            defaultextension='.png', title="Window-2")
plt.savefig(a)
Run Code Online (Sandbox Code Playgroud)

但为了安全起见,还要检查该窗口后面是否有文件名,因为用户可能会“取消”:

a = asksaveasfilename(filetypes=(("PNG Image", "*.png"),("All Files", "*.*")), 
            defaultextension='.png', title="Window-2")
if a:
    plt.savefig(a)
Run Code Online (Sandbox Code Playgroud)