I have this class Knop (meaning 'button') with the following constructor:
def __init__(self, rechthoek, kleur = BUTTONCOLOR, actie = printtest, tekst = "", tekstkleur = BUTTONTEXTCOLOR, actie_args = {}, score = -1 ):
self.rechthoek = rechthoek # pygame.Rect object
self.kleur = kleur # button color: (r,g,b) tuple
self.actie = actie # the function to call when pressing the button
self.actie_args = actie_args # the arguments to the function actie
self.tekst = tekst # the text in the button
self.tekstkleur = tekstkleur # the color of the text
self.score = score
The idea is that the function actie is called with the arguments actie_args (which is a dict) as follows: return_val = self.actie(**self.actie_args).
Now, somewhere else, I make a list knoppen (meaning 'buttons') by creating new instances:
knoppen = []
for i, emotie in enumerate(emoties):
ypos = y[4] + FONTSIZE*i*2 - FONTSIZE/4
r = pygame.Rect(xpos, ypos, buttonwidth, buttonheight)
eknop = Knop(r, emo_kleur[i], tekst = emoties[i])
eknop.actie = set_emotie
eknop.tekstkleur = BLACK
knoppen.append(eknop)
And a little later on in the program:
cnt_rect = pygame.Rect(x[1], y[8], x[3], y[1])
bknop = Knop(cnt_rect, BUTTONCOLOR, tekst = TXT_CONFIRM)
bknop.actie = bevestig
bknop.actie_args["annfile"] = appvars["saved_utterances"]
bknop.actie_args["utt_i_file"] = appvars["gebleven_bij_utterance"]
knoppen.append(bknop)
Now, when these latter block is executed, a problem arises. The actie_args argument of bknop seems to be 'copied' to the actie_args of all the other buttons created before. I tested this by making a __str__ function within the Knop class and printing an eknop before and after creating the bknop.
What is this caused by and how can I solve this?