Bonjour !

J'ai besoin de votre aide !

Je souhaite créer une IHM permettant à un utilisateur d'entrée des données et de tracer automatiquement un graphique. Pour ce faire j'ai décidé d'utiliser Tkinter.

Ce que je souhaite pour mon application c'est une page d'acceuil sur laquelle l'utilisateur entre ses données puis clique sur un bouton pour tracer un graph sur une seconde page.

Mon idée finale est de récupérer des données via APIs grâce aux entrées de l'utilisateur, et d'exploiter ces données pour tracer un graph.

Mais avant d'en arrivée là, je bloque sur certains points au niveau de tkinter que je maîtrise encore mal.

J'ai donc suivis la première partie d'un tutoriel : https://pythonprogramming.net/tkinte...ctual-program/ ; qui m'a permit de créer les deux fenêtres dont j'ai besoin.

J'ai alors tenté avec un exemple simple de tracer un graphique en utilisant le widget Entry pour récupérer les infos de l'utilisateur :

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
 
import matplotlib
matplotlib.use("TkAgg")
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure
from matplotlib import style
 
import tkinter as tk
from tkinter import ttk
 
 
LARGE_FONT= ("Verdana", 16)
NORM_FONT = ("Helvetica", 10)
SMALL_FONT = ("Helvetica", 8)
 
style.use("ggplot")
 
f = Figure()
a = f.add_subplot(111)
 
# ---------- Fonction pour tracer le graph sur la "Page du graph"
 
def Graph():
 
    x1 = float(entry1.get())
    x2 = float(entry2.get())
    x3 = float(entry3.get())
 
 
    xAxis = [float(x1),float(x2),float(x3)]
    yAxis = [float(x1),float(x2),float(x3)]
    a.bar(xAxis,yAxis)
 
 
 
class GUI(tk.Tk):
 
    def __init__(self, *args, **kwargs):
 
        tk.Tk.__init__(self, *args, **kwargs)
 
        tk.Tk.wm_title(self, "Titre")
 
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand = True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)
 
        #Menu
        menubar = tk.Menu(container)
        filemenu = tk.Menu(menubar, tearoff=0)
        filemenu.add_command(label="Exit", command=self.destroy)
        menubar.add_cascade(label="File", menu=filemenu)
 
        tk.Tk.config(self, menu=menubar)
 
        self.frames = {}
 
        for F in (StartPage, PageGraph):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")
        self.show_frame(StartPage)
 
    def show_frame(self, cont):
 
        frame = self.frames[cont]
        frame.tkraise()
 
 
class StartPage(tk.Frame):
 
    def __init__(self, parent, controller):
        tk.Frame.__init__(self,parent)
        label = tk.Label(self, text="Page d'acceuil", font=LARGE_FONT)
        label.pack(pady=10,padx=10)
 
        #---------- Boutton pour switcher sur la "Page du graph"
 
        button = ttk.Button(self, text="Page du Graph",
                            command=lambda: controller.show_frame(PageGraph))
        button.pack()
 
        label1 = ttk.Label(self, text="X1", font=NORM_FONT)
        label1.pack(pady=10,padx=10)
        entry1 = ttk.Entry(self)
        entry1.pack(pady=10,padx=10)
 
        label2 = ttk.Label(self, text="X2", font=NORM_FONT)
        label2.pack(pady=10,padx=10)
        entry2 = ttk.Entry(self)
        entry2.pack(pady=10,padx=10)
 
        label3 = ttk.Label(self, text="X3", font=NORM_FONT)
        label3.pack(pady=10,padx=10)
        entry3 = ttk.Entry(self)
        entry3.pack(pady=10,padx=10)
 
        # ---------- Boutton pour tracer le graph dans "Page du graph"
 
        button1 = ttk.Button(self, text="Valider", command=Graph)
        button1.pack()
 
 
 
 
 
class PageGraph(tk.Frame):
 
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="Graph Page", font=LARGE_FONT)
        label.pack(pady=10,padx=10)
 
        # ---------- Boutton pour retourner à la page d'acceuil
 
        button1 = ttk.Button(self, text="Back to Home",
                            command=lambda: controller.show_frame(StartPage))
        button1.pack()
 
        # ---------- Création du canvas
 
        canvas = FigureCanvasTkAgg(f, self)
        canvas.draw()
        canvas.get_tk_widget().pack(side=tk.BOTTOM, fill=tk.BOTH, expand=True)
 
        toolbar = NavigationToolbar2TkAgg(canvas, self)
        toolbar.update()
        canvas._tkcanvas.pack(side=tk.TOP, fill=tk.BOTH, expand=True)
 
 
 
 
app = GUI()
app.geometry("1280x720")
app.mainloop()
Et bien évidemment rien ne se trace ! ^^'

Je pense que mon problème vient de l'utilisation des classes qui ne me sont pas encore très familières je doit l'avouer !

Auriez-vous une idée de l'origine de mon problème ?

Je vous remercie !