import PySimpleGUI as sg import numpy as np """ Embedding the Matplotlib toolbar into your application """ # ------------------------------- This is to include a matplotlib figure in a Tkinter canvas import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk def draw_figure_w_toolbar(canvas, fig, canvas_toolbar): if canvas.children: for child in canvas.winfo_children(): child.destroy() if canvas_toolbar.children: for child in canvas_toolbar.winfo_children(): child.destroy() figure_canvas_agg = FigureCanvasTkAgg(fig, master=canvas) figure_canvas_agg.draw() toolbar = Toolbar(figure_canvas_agg, canvas_toolbar) toolbar.update() figure_canvas_agg.get_tk_widget().pack(side='right', fill='both', expand=1) class Toolbar(NavigationToolbar2Tk): def __init__(self, *args, **kwargs): super(Toolbar, self).__init__(*args, **kwargs) # ------------------------------- PySimpleGUI CODE layout = [ [sg.T('Graph: y=sin(x)')], [sg.B('Plot'), sg.B('Exit')], [sg.T('Controls:')], [sg.Canvas(key='controls_cv')], [sg.T('Figure:')], [sg.Column( layout=[ [sg.Canvas(key='fig_cv', # it's important that you set this size size=(400 * 2, 400) )] ], background_color='#DAE0E6', pad=(0, 0) )], [sg.B('Alive?')] ] window = sg.Window('Graph with controls', layout) while True: event, values = window.read() print(event, values) if event in (sg.WIN_CLOSED, 'Exit'): # always, always give a way out! break elif event is 'Plot': # ------------------------------- PASTE YOUR MATPLOTLIB CODE HERE plt.figure(1) fig = plt.gcf() DPI = fig.get_dpi() # ------------------------------- you have to play with this size to reduce the movement error when the mouse hovers over the figure, it's close to canvas size fig.set_size_inches(404 * 2 / float(DPI), 404 / float(DPI)) # ------------------------------- x = np.linspace(0, 2 * np.pi) y = np.sin(x) plt.plot(x, y) plt.title('y=sin(x)') plt.xlabel('X') plt.ylabel('Y') plt.grid() # ------------------------------- Instead of plt.show() draw_figure_w_toolbar(window['fig_cv'].TKCanvas, fig, window['controls_cv'].TKCanvas) window.close()