从另一个文件调用时,plt.savefig停止工作

时间:2019-10-02 08:37:04

标签: python matplotlib tkinter

我有一个非常适合批量数据分析和绘图的代码。但是现在我正在尝试将其合并到更大的数据分析GUI中。我发现当我自己运行代码时,一切顺利。但是,当我从主代码调用它并从tkinter按钮运行它时,情况就不一样了。一切看起来都一样,并且运行流畅,唯一的区别是没有文件被保存。

我认为用“ ____init____”定义哪个窗口可能是一个问题?或与我如何在子代码中创建和销毁Tk()窗口有关的东西?

** stackoverflow文本编辑器使用下划线使文本变为粗体/斜体,因此对于所有使用双下划线在python中包装“ init”或“ main”的情况,我在这里必须在每侧使用四个

我的代码(保存为SubCode.py):

def AnalysisFunction():
    *does things*
    main = Tk()
    os.chdir(OutputFolder)
    plt.savefig('image.png')
    main.destroy()
if __name__ == '__main__':
    AnalysisFuntion()

我想添加我的代码:

import SubCode

class TopLevel(Frame):
    def __init__(self, master):
        Frame.__init__(self,master)
        *Creates main GUI window*
        MyButton = Button(root, command = self.CallSubCode)
    def CallSubCode(self):
        SubCode.AnalysisFunction()
root = Tk()
main_window = TopLevel(root)
root.mainloop()

有什么主意为什么仅子代码可以保存数字,但是在较大的GUI调用时却不能保存数字?仅供参考,通过较大的GUI运行时,它仍然可以正确创建所有变量。

2 个答案:

答案 0 :(得分:0)

我认为您应该只将图像保存在SubCode.py中,而不创建tkinter窗口。即

def AnalysisFunction():
    *does things*
    os.chdir(OutputFolder)
    plt.savefig('image.png')
if __name__ == '__main__':
    AnalysisFuntion()

答案 1 :(得分:0)

我想通了,我不得不将整个SubCode放在一个类结构中,然后将其称为自己的Toplevel应用程序。我认为,否则plt.savefig命令不知道它正在使用哪个Tkinter窗口,而是尝试在“主机”窗口中查找数据,而不是在处理数据的窗口中查找。