我试图在树莓派上运行一些python代码,以模拟不同的传感器。当两次调用一个函数时,被告知我提供了太多参数。我将有大约20个不同的函数都调用此outputPWM
函数,但是我仅以两个函数为例。
我本周才开始使用python,所以我不确定如何解决此问题。如果我可以在下一次调用之前以某种方式清除参数的outputPWM
函数,否则我的代码可能有一些根本性的缺陷
def outputPWM(n1,i):
num1 = (n1.get())
result = int(num1)
dutycycle = result
print(List[25])
List[i].start(0)
List[i].ChangeDutyCycle(dutycycle)
print("Duty cycle is %d" % dutycycle)
print("output is on port %d" %i)
def control():
ControlReturn = tk.StringVar()
ControlLabel = tk.Label(master, text="Control Return Air Temperature (Degrees Celcius)").grid(row=0, column=0)
ControlResult = tk.Label(master)
ControlEntry = tk.Entry(master, textvariable=ControlReturn).grid(row=0,column=2)
global outputPWM
outputPWM=partial(outputPWM,ControlReturn,20)
buttonCal = tk.Button(master, text="Enter", command=outputPWM).grid(row=0, column=3)
def display():
DisplayReturn = tk.StringVar()
DisplayLabel = tk.Label(master,text="Display Return Air Temperature (Degrees Celcius)").grid(row=1, column=0)
DisplayEntry = tk.Entry(master, textvariable=DisplayReturn).grid(row=1,column=2)
global outputPWM
outputPWM= partial(outputPWM,DisplayReturn,25)
buttonCal = tk.Button(master, text="Enter", command=outputPWM).grid(row=1, column=3)
display()
control()
我收到的错误是:
Exception in Tkinter callback
Traceback (most recent call last):
File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1550, in __call__
return self.func(*args)
TypeError: outputPWM() takes exactly 2 arguments (4 given)
答案 0 :(得分:0)
无论何时创建局部函数,都应为其命名而不是全局outputPWM:
global outputPWM
outputPWM_ = partial(outputPWM, ControlReturn, 20)
buttonCal = tk.Button(master, text="Enter", command=outputPWM_).grid(row=0, column=3)
答案 1 :(得分:0)
此代码执行两次,第一次在display()
中执行,第二次在control()
中执行(参数稍有不同,但这无关紧要)
global outputPWM
outputPWM=partial(outputPWM,ControlReturn,20)
它用派生的部分函数替换原始函数,该函数添加了2个args。第二轮用从第一部分函数派生的另一个部分函数替换该部分函数。结果函数分两步添加2 + 2 args。这就是“需要2个参数(给定4个)”错误的原因。
除非确实没有必要,否则解决方案不会重复使用相同的名称(请参见https://en.wikipedia.org/wiki/Variable_shadowing)并且不使用global
。