Как изменять график по нажатию на кнопку

В проекте должна быть реализована программа для построения графика функции y = 5 / x + 4, x берется из Scale, а управление работой программы через Button, цвет графика D2691E

from tkinter import *

from matplotlib.figure import Figure 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np

def func():
    x = []
    y = []
    for i in np.arange(0, 3, 0.01):
        x.append(i)
        y.append(5 / var.get() + 4)
    plt.plot(x, y, color = '#D2691E')

tk = Tk() 

tk.title('') 
tk.geometry("700x500") 

btn = Button(master = tk, text = 'change', command = func)
btn.pack()

fig = Figure(figsize = (10, 4))

plt = fig.add_subplot()

canvas = FigureCanvasTkAgg(fig, master = tk)
canvas.draw()
canvas.get_tk_widget().pack()

var = DoubleVar()
scale = Scale(tk, orient = HORIZONTAL, variable = var)
scale.pack()

tk.mainloop()

Ответы (1 шт):

Автор решения: assert

Я изначально не правильно подошёл к этому вопросу надо было создавать график и при нажатии проверять есть ли у нас график если есть то удалять и создать новый

from tkinter import *
from matplotlib.figure import Figure 
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import numpy as np

def graph():
    global canvas
    if canvas:
        canvas.get_tk_widget().destroy()

    r = var.get()
    x1 = np.linspace(-r, 0)
    x2 = np.linspace(0, r)
    y = lambda x : 5 / x + 4

    fig = Figure()
    ax = fig.add_subplot()
    ax.plot(x1, y(x1), color = '#D2691E')
    ax.plot(x2, y(x2), color = '#D2691E')

    canvas = FigureCanvasTkAgg(fig, master = tk)
    canvas.draw()
    canvas.get_tk_widget().pack()

tk = Tk() 
tk.geometry("700x500")

btn = Button(master = tk, text = 'change', command = graph)
var = DoubleVar()
scale = Scale(tk, orient = HORIZONTAL, variable = var)
btn.pack()
scale.pack()

canvas = None
graph()

tk.mainloop()
→ Ссылка