Tkinter: построение нескольких графиков, GUI вылетает и windows говорит, что python программа не отвечает? - PullRequest
2 голосов
/ 19 июня 2020

В моем tkinter GUI у меня есть две кнопки, которые строят график для разных параметров, но когда я нажимаю на одну из кнопок, график строится успешно, и я не встраиваю окно matplotlib в любое другое окно tkinter, я напрямую вызов графика matplotlib, но если не закрывать один построенный график, если я нажимаю на другой, открывается другой график windows, и внезапно появляется ошибка, что python программа не отвечает. Так что встраивание графика matplotlib в другое окно верхнего уровня поможет, мы не можем вызывать несколько графиков, не встраивая их в окно tkinter. Вот пример кода

from tkinter import *
import matplotlib.pyplot  as plt
import matplotlib
matplotlib.use("TkAgg")
import mttkinter
import threading
def plottingthefirst():
    plt.figure()
    parameter1 = [5, 6, 7, 8, 9]
    plt.plot(parameter1, marks)
    plt.xlabel('parameter1')
    plt.ylabel('marks')
    plt.show()


def plottingthesecond():
    plt.figure()
    parameter2 = [1, 2, 3, 4, 5]
    plt.plot(parameter2, marks)
    plt.xlabel('parameter2')
    plt.ylabel('marks')
    plt.show()

def func3():
    threading.Thread(target=plottingthefirst).start()
def func4():
    threading.Thread(target=plottingthesecond).start()
root = Tk(mt_debug=1)
root.geometry('445x788')


global marks
marks = [10, 20, 30, 40, 50]
B1 = Button(root, text="Plot1", command=func3).grid(row=1, column=1)
B2 = Button(root, text="Plot2", command=func4).grid(row=2, column=1)
root.mainloop()

Мне нужно вызвать потоки здесь, потому что это не точный код, который я использую в основном, я выполняю обработку перед построением графика для извлечения значений параметров x и y, поэтому, если я удалю потоки, мое главное окно будет зависать, поэтому мне нужно потоки здесь, так что есть какое-либо решение, которое без удаления threading мы можем отображать несколько графиков одновременно

1 Ответ

0 голосов
/ 19 июня 2020

Добавление plt.close () в начале обеих функций должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...