plt.savefig перестает работать при вызове из другого файла - PullRequest
0 голосов
/ 02 октября 2019

У меня есть код, который хорошо работает для анализа больших объемов данных и построения графиков. Но сейчас я пытаюсь включить его в графический интерфейс для анализа данных. Я обнаружил, что когда я запускаю свой код самостоятельно, все идет хорошо. Но когда я вызываю его из основного кода и запускаю из кнопки tkinter, это не то же самое. Все выглядит одинаково и работает гладко, с той лишь разницей, что файлы не сохраняются.

Я думаю, может быть, это проблема с тем, какое окно определено с "____init____"? или что-то с тем, как я создаю и уничтожаю окна Tk () внутри подкода?

** текстовый редактор stackoverflow использует подчеркивания, чтобы сделать текст полужирным / курсивным, поэтому во всех случаях двойные подчеркивания используются для переноса "init"или" основной "в Python, я должен был использовать четыре с каждой стороны здесь

мой код (сохраненный как 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()

Есть идеи, почему один субкод может сохранять цифры, но не может при вызове большим графическим интерфейсом? К вашему сведению, он по-прежнему создает все переменные правильно при запуске через больший графический интерфейс.

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

Я понял, мне пришлось поместить весь SubCode в структуру класса, а затем назвать его своим собственным приложением Toplevel. Я думаю, что в противном случае команда plt.savefig не знает, с каким окном Tkinter она работает, и пытается найти данные в окне «хоста», а не в том, которое обрабатывает данные.

0 голосов
/ 02 октября 2019

Я думаю, вы должны просто сохранить изображение в SubCode.py без создания окна tkinter. т.е.

def AnalysisFunction():
    *does things*
    os.chdir(OutputFolder)
    plt.savefig('image.png')
if __name__ == '__main__':
    AnalysisFuntion()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...