The following program simulates a traffic light system with some buttons. The buttons appear correctly, but if I'm trying to call the method to create/change the LEDs, it ends up in the wrong method. Here's the important part of the code:
class GUI (threading.Thread):def __init__(self, num):threading.Thread.__init__(self)def run(self):global windowwindow = Tk()window.title('Ampel GUI')window = Canvas(window, width=400, height=200)window.pack()button1 = Button(window, text="Press", command=lambda: pushbutton(25))button1.pack()button1.place(x=190, y=70)button2 = Button(window, text="Press", command=lambda: pushbutton(12))button2.pack()button2.place(x=115, y=160)(...)button6 = Button(window, text="V2", command=lambda: pushbutton(22)) # V2button6.pack()button6.place(x=280, y=130)window.mainloop()@staticmethoddef output(self, lampe, status):if status == 0:if lampe == 21:window.create_oval(140, 30, 160, 10, fill="#FFA6A6")if lampe == 20:window.create_oval(170, 30, 190, 10, fill="#FAFAAA")callthread=GUI()
callthread=threading.Thread(target=GUI.output, args=(21,0))
callthread.start()
How do I fix the callthread-part, so that the output method is called with the arguments (21,0)? Right now all that it ends up with is
TypeError: __init__() takes exactly 2 arguments (1 given)
//edit: This is how the fixed version looks like:class GUI (threading.Thread):
def __init__(self):threading.Thread.__init__(self)def run(self):global windowwindow = Tk()window.title('Ampel GUI')window = Canvas(window, width=400, height=200)window.pack()button1 = Button(window, text="Press", command=lambda: pushbutton(25))button1.pack()button1.place(x=190, y=70)button2 = Button(window, text="Press", command=lambda: pushbutton(12))button2.pack()button2.place(x=115, y=160)(...)button6 = Button(window, text="V2", command=lambda: pushbutton(22)) # V2button6.pack()button6.place(x=280, y=130)window.mainloop()@staticmethoddef output(lampe, status):if status == 0:if lampe == 21:window.create_oval(140, 30, 160, 10, fill="#FFA6A6")if lampe == 20:window.create_oval(170, 30, 190, 10, fill="#FAFAAA")callthread=GUI()
callthread=threading.Thread(target=GUI.output, args=(21,0))
callthread.start()