Je suis débutant sans tkinter, j'utilise python 3 et je code dans l'environnement spyder/ Anaconda sous windows 10

Je suis parti d'un exemple de code qui permet d'afficher un graphique avec sa toolbar ( boutons pour Z00M et autres) généré par matplotlib dans un canvas de tkinter. Pour l'exemple de graphique 2D que j'ai trouvé la toolbar fonctionne, mais pour le graphique 3D que j'ai utilisé , la toollbar apparait bien mais ses boutons ne fonctionnent pas!

Je n'ai pas trouvé de réponse à ce problème dans la FAQ Python / tkinter

Voici le code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import tkinter
from matplotlib.figure import Figure
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
 
from matplotlib.backends.backend_tkagg import (
    FigureCanvasTkAgg, NavigationToolbar2Tk)
from matplotlib.backend_bases import key_press_handler
 
import numpy as np
 
#choix de la figure===================
 
choix=1  #la toolbar fonctionne
choix=2  # la toolbar ne fonctionne pas
 
if choix==1:
    fig = Figure(figsize=(5, 4), dpi=100)
    t = np.arange(0, 3, .01)
    fig.add_subplot(111).plot(t, 2 * np.sin(2 * np.pi * t))
 
if choix==2: # la figure pour laquelle les bootons (zoom, ...)) fonctionnent 
 
    # Make data.
    X = np.arange(-5, 5, 0.25)
    Y = np.arange(-5, 5, 0.25)
    X, Y = np.meshgrid(X, Y)
    R = np.sqrt(X**2 + Y**2)
    Z = np.sin(R)
 
    #figure 3D
    fig = Figure(figsize=(5, 4), dpi=100)
    ax = fig.add_subplot(111, projection='3d')
    surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm,
                           linewidth=0, antialiased=False)
 
    # Add a color bar which maps values to colors.
    fig.colorbar(surf, shrink=0.5, aspect=5)
 
#===========================
 
 
root = tkinter.Tk()
root.wm_title("Embedding in Tk")
 
canvas = FigureCanvasTkAgg(fig, master=root)  # A tk.DrawingArea.
canvas.draw()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
 
toolbar = NavigationToolbar2Tk(canvas, root)
toolbar.update()
canvas.get_tk_widget().pack(side=tkinter.TOP, fill=tkinter.BOTH, expand=1)
 
 
def on_key_press(event):
    print("you pressed {}".format(event.key))
    key_press_handler(event, canvas, toolbar)
 
canvas.mpl_connect("key_press_event", on_key_press)
 
def _quit():
    root.quit()     # stops mainloop
    root.destroy()  # this is necessary on Windows to prevent
                    # Fatal Python Error: PyEval_RestoreThread: NULL tstate
 
# pour quitter 
button = tkinter.Button(master=root, text="Quit", command=_quit)
button.pack(side=tkinter.BOTTOM)
 
tkinter.mainloop()

Si quelqu'un a une solution ...Merci