Bonjour à toutes et à tous,
Je débute dans les interfaces graphiques sous python, je vous demande pardon par avance la question qui m'amène vous parait trop trivialle…
J'essaye de coder un petit logiciel qui ouvre des fichiers de sortie de modèle météo (Arome 0.025°) météo pour en faire des cartes (T2m, TPW850 et Z1.5pvu etc).
Testé sans passer par tkinter, la classe fonctionne correctement, la carte est bien dessinnée.
Maintenant j'aimerai afficher la carte dans un canevas dans une gui avec tkinter…
Donc je crée une classe "Application()" qui gère la fenêtre principale et une autre "Arome_0025_Carte_Pour_canvas" dans laquelle se trace la figure.
J'ai mis les deux classes dans un même fichier dont le contenu est ci-dessous, j'ai enlevé le code inutile (je ne connais pas les us et coutumes de ce forum, je peux tout mettre si ça vous dit)
Quand je compile, l'interface graphique apparaît mais quand je clique sur le bouton, j'ai cette erreur:
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84 import matplotlib matplotlib.use("TkAgg") import pygrib import numpy as np from datetime import datetime from datetime import timedelta import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature #from mpl_toolkits.basemap import Basemap import matplotlib matplotlib.use("TkAgg") import matplotlib.dates as mdates import matplotlib.colors as mcolors import metpy.plots as metplots from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg from matplotlib.figure import Figure from tkinter import * class Application(Tk): def __init__(self): Tk.__init__(self) # constructeur de la classe parente self.can = Canvas(self, width =50, height =50, bg ="white") self.can.pack(side =TOP, padx =5, pady =5) Button(self, text ="Train", command =self.dessine).pack(side =LEFT) def dessine(self): "instanciation de 4 wagons dans le canevas" #self.w1 = Wagon(self.can, 10, 30) self.c1 = Arome_0025_Carte_Pour_canvas(self.can,[ ]) self.c1.envoyer_Carte_Vers_Gui() class Arome_0025_Carte_Pour_canvas(object): def __init__(self,canev,[ ]): [ ] self.canev=canev def construire_Noms(self): [ ] def envoyer_Carte_Vers_Gui(self): [ ] proj = ccrs.Stereographic(central_longitude=lons_moy,central_latitude=lats_moy) f = Figure(figsize=(5,5), dpi=100) ax = f.add_subplot(111) ax = plt.axes(projection=proj) [ ] self.canev = FigureCanvasTkAgg(f, self) plt.show() self.canev.show() self.canev.get_tk_widget().pack(expand=True) toolbar = NavigationToolbar2TkAgg(self.canev, self) toolbar.update() self.canev._tkcanvas.pack(expand=True) del(tt_1) del(tt_2) del(titre) del(nom) #f = Figure(figsize=(5,5), dpi=100) #a = f.add_subplot(111) #a = fig print("coucou")
C'est donc un problème avec FigureCanvasTkAgg(f, self) et tk(inter)Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python3.5/tkinter/__init__.py", line 1562, in __call__
return self.func(*args)
File "/home/lucas/Documents/programmation/Aro/lumet__auieui.py", line 46, in dessine
self.c1.envoyer_Carte_Vers_Gui()
File "/home/lucas/Documents/programmation/Aro/lumet__auieui.py", line 307, in envoyer_Carte_Vers_Gui
self.canev = FigureCanvasTkAgg(f, self)
File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_tkagg.py", line 227, in __init__
highlightthickness=0)
File "/usr/lib/python3.5/tkinter/__init__.py", line 2257, in __init__
Widget.__init__(self, master, 'canvas', cnf, kw)
File "/usr/lib/python3.5/tkinter/__init__.py", line 2144, in __init__
BaseWidget._setup(self, master, cnf)
File "/usr/lib/python3.5/tkinter/__init__.py", line 2122, in _setup
self.tk = master.tk
AttributeError: 'Arome_0025_Carte_Pour_canvas' object has no attribute 'tk'
J'ai écumé le web à la recherche de la réponse mais je n'ai pas réussi à me dépatouiller de cette erreur…
Du coup, si vous aviez une idée pour me débloquer, ça serait super!
Merci d'avance et bon début de we!
Grilu
Partager