Jul-08-2020, 05:53 PM
(This post was last modified: Jul-08-2020, 05:53 PM by MulliganAgain.)
I am trying to refactor some code into classes and methods that I have for a LED matrix GUI. When I create the matrix of buttons I created a lambda to recall the number of the button when it was created, but when I click a button it gives an error. This line of code worked when it was not inside a class but now that its transferring the variable "i" to a method within the class it just says the argument is missing when I click a button. please ignore errors within the click method. I cant really move on while this is not working so the click method is not finished being adjusted to the class.
Error:File "C:\python_gui\LEDMATRIX.py", line 40, in <lambda>
self.b = tk.Button(self.window, text="*", command=lambda i=self.but_num: ButtonMatrix.click(i))
TypeError: click() missing 1 required positional argument: 'i'
def makematrix(self): self.but_num=0 #create matrix of buttons for row in range(1, self.num_leds[0]+1): for column in range(self.num_leds[1]): self.b = tk.Button(self.window, text="*", command=lambda i=self.but_num: ButtonMatrix.click(i)) if (row % 2) == 0: self.b.grid(row=row, column=33-column, padx=self.pad, pady=self.pad, columnspan=2) else: if row == 1: self.b.grid(row=row, column=column, padx=self.pad, pady=self.pad, columnspan=1) else: self.b.grid(row=row, column=column, padx=self.pad, pady=self.pad, columnspan=3) self.but_num+=1 self.button.append(self.b) def click(self, i): if self.button[i].cget('bg') == self.values[LEDcolorslide.get()]: self.button[i].config(bg=self.values[bgLEDcolorslide.get()]) else: self.button[i].config(bg=self.values[LEDcolorslide.get()])