Python函数调用了错误的方法/目标 [英] Python function calls the wrong method/target
问题描述
以下程序通过一些按钮模拟交通信号灯系统.这些按钮正确显示,但是如果我尝试调用该方法来创建/更改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屋!