Python函数调用了错误的方法/目标 [英] Python function calls the wrong method/target

查看:186
本文介绍了Python函数调用了错误的方法/目标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下程序通过一些按钮模拟交通信号灯系统.这些按钮正确显示,但是如果我尝试调用该方法来创建/更改LED,则结果将以错误的方法结束.这是代码的重要部分:

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 window
        window = 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)) # V2
        button6.pack()
        button6.place(x=280, y=130)
        window.mainloop()

    @staticmethod
    def 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()

如何修复callthread-part,以便使用参数(21,0)调用输出方法?现在,它最终的结果是 TypeError: __init__() takes exactly 2 arguments (1 given)

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:这是固定版本的样子: 类GUI(threading.Thread):

//edit: This is how the fixed version looks like: class GUI (threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self)

    def run(self):
        global window
        window = 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)) # V2
        button6.pack()
        button6.place(x=280, y=130)
        window.mainloop()

    @staticmethod
    def 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()

推荐答案

您的错误在此行上:

callthread=GUI()

问题在于__init__被定义为:

def __init__(self, num):

因此,要么在创建GUI对象时提供参数,要么从__init__方法中删除num参数.

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

注意:此答案适用于您修改之前的代码.编辑后,您从__init__中删除了num自变量.您不应该再获得带有已编辑代码的TypeError.

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.

这篇关于Python函数调用了错误的方法/目标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆