Bonjour

Je suis en train d'explorer tkinter pour la conception d'une GUI selon les principes MVC. J'essaye différentes mises en place à partir de divers documents et tutoriels. Dans le code ci-dessous l'appui sur le button3 provoque bien l'affichage de Hello dans la console et le changement de la couleur du fond du bouton alternativement jaune et vert.
Mais en plus sans que le programme se plante j'ai le message d'erreur ci-dessous à chaque appui :

(executing lines 1 to 118 of "view.py")
Hello
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Programmes\pyzo2015a\lib\tkinter\__init__.py", line 1533, in __call__
return self.func(*args)
TypeError: button3Click() missing 1 required positional argument: 'event'

Si quelqu'un peut m'expliquer pourquoi et le remède à apporter merci beaucoup par avance.

Voilà 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
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
 
import tkinter as tk
from tkinter import messagebox
from controller import *
from configurations import *
 
 
class View(tk.Tk):
 
    def __init__(self, MVC_controller):
        # Héritage de la classe parente
        super().__init__()
 
        # Géometrie
        self.geometry("800x600")
 
        # Appel du controleur
        self.controller = MVC_controller
 
        # Mise en place de la fenêtre
        self.create_top_menu()
 
        # Le container principal
        self.myContainer1 = tk.Frame(self, background ='purple') ###
        self.myContainer1.pack(fill = tk.BOTH, expand=tk.YES)
 
        # frame boutons coté droit du container principal
        self.frame_boutons = tk.Frame(self.myContainer1, width=200, background="yellow") 
        self.frame_boutons.pack(side=tk.RIGHT,fill=tk.Y)
 
        # frame canvas dans le container principal 
        self.frame_canvas = tk.Frame(self.myContainer1, background="pink") 
        self.frame_canvas.pack(side=tk.RIGHT,fill=tk.BOTH)            
 
        # Maintenant nous ajoutons des bouttons à bouttons frame
        self.button1 = tk.Button(self.frame_boutons, command=self.destroy)
        self.button1.configure(text="QUIT", background= "green")
        self.button1.configure(width=10)
        self.button1.pack(fill=tk.X)
 
        # Maintenant nous ajoutons des bouttons à bouttons frame
        self.button2 = tk.Button(self.frame_boutons, command=self.destroy)
        self.button2.configure(text="BT2", background= "yellow")
        self.button2.pack(fill=tk.X)
 
        # Maintenant nous ajoutons des bouttons à bouttons frame
        self.button3 = tk.Button(self.frame_boutons, command=self.button3Click)
        self.button3.configure(text="BT3", background= "yellow")
        self.button3.pack(fill=tk.X)
        self.button3.bind("<Button-1>", self.button3Click)         
 
        # Bandeau information container secondaire
        self.myContainer2 = tk.Frame(self, height=64, background="lightblue")
        self.info_label = tk.Label(self.myContainer2, text="   White to Start the Game  ", fg=BOARD_COLOR_2)
        self.info_label.pack(side=tk.RIGHT, padx=8, pady=5)
        self.myContainer2.pack(fill=tk.X, side=tk.BOTTOM)        
 
    def button3Click(self,event):
        print("Hello")
        if self.button3["background"] == "green": 
            self.button3["background"] = "yellow"
        else:
            self.button3["background"] = "green"
 
    def create_top_menu(self):
        self.menu_bar = tk.Menu()
        self.create_file_menu()
        self.create_edit_menu()
        self.create_about_menu()
 
    def create_canvas(self, parent):
        self.canvas = tk.Canvas(parent, background="pink")
        self.canvas.pack(side=tk.LEFT,fill=tk.BOTH, padx=8, pady=8)
 
    def create_boutons_frame(self, parent):
        self.button1 = tk.Button(parent, command=self.destroy, width = 200)
        self.button1.configure(text="QUIT", background= "green")
        self.button1.configure(width=10)
        self.button1.pack(side = tk.TOP, padx=8, pady=8)   
 
    def on_about_menu_clicked(self):
        messagebox.showinfo("PROJET GUI")
 
    def on_new_game_menu_clicked(self):
        pass
 
    def on_preference_menu_clicked(self):
        pass
 
    def create_file_menu(self):
        self.file_menu = tk.Menu(self.menu_bar, tearoff=0)
        self.file_menu.add_command(label="New Game", command=self.on_new_game_menu_clicked)
        self.menu_bar.add_cascade(label="File", menu=self.file_menu)
        self.config(menu=self.menu_bar)
 
    def create_edit_menu(self):
        self.edit_menu = tk.Menu(self.menu_bar, tearoff=0)
        self.edit_menu.add_command(label="Preferences", command=self.on_preference_menu_clicked)
        self.menu_bar.add_cascade(label="Edit", menu=self.edit_menu)
        self.config(menu=self.menu_bar)
 
    def create_about_menu(self):
        self.about_menu = tk.Menu(self.menu_bar, tearoff=0)
        self.about_menu.add_command(label="About", command=self.on_about_menu_clicked)
        self.menu_bar.add_cascade(label="About", menu=self.about_menu)
        self.config(menu=self.menu_bar)
 
def init_interface():
    MVC_controller = Controller()
    app = View(MVC_controller)
    app.mainloop()
 
if __name__ == "__main__":
    init_interface()