Skip to content Skip to sidebar Skip to footer

Python Function Calls The Wrong Method/target

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 i

Solution 1:

Your error is on this line:

callthread=GUI()

The problem is that __init__ was defined as:

def__init__(self, num):

So either provide an argument when creating a GUI object, or remove the num argument from the __init__ method.

note: This answer applies to the code prior to your edit. After your edit you removed the num argument from __init__. You should no longer get the TypeError with your edited code.

Solution 2:

Remove the num argument from __init__() and the self argument from output() since it is a static method.

Solution 3:

May be you should not make a static method and no need to make it global.

Remember dont try to subclass threading.Thread if are not clear about how it works. Instead use the following approach. It will do everything easy for you without sub classing thread.

try this:

class  GUI()
    def __init__(self):
        window = Tk()
        window.title('Ampel GUI')
        self.window = Canvas(window, width=400, height=200)
        self.window.pack()

        button1 = Button(self.window, text="Press", command=lambda: pushbutton(25))
        button1.pack()
        button1.place(x=190, y=70)

        button2 = Button(self.window, text="Press", command=lambda: pushbutton(12))
        button2.pack()
        button2.place(x=115, y=160)

        (...)

        button6 = Button(self.window, text="V2", command=lambda: pushbutton(22)) # V2
        button6.pack()
        button6.place(x=280, y=130)
        window.mainloop()

    def output(lampe, status):
        if status == 0:
            if lampe == 21:
                self.window.create_oval(140, 30, 160, 10, fill="#FFA6A6")
            if lampe == 20:
                self.window.create_oval(170, 30, 190, 10, fill="#FAFAAA")

callthread=GUI()
callthread=threading.Thread(target=callthread.output, args=(21,0))
callthread.start()

Post a Comment for "Python Function Calls The Wrong Method/target"