我试图了解有关Python功能的更多信息,但我无法超越这个障碍
我尝试使用两个不同的功能,每个功能都会在单击按钮时为文件添加一个数字,然后最终功能会接收此数字并报告总和。 但我一直得到一个缺少必需的位置参数错误,我只是从Python开始,我将不胜感激任何帮助。
def printB1(event, bill1):
f = open('myfile.txt', 'a')
f.write('$10.99\n')
bill1 += 10.99
return bill1
def printB2(event, bill2):
f = open('myfile.txt', 'a')
f.write('$3.99\n')
bill2 += 3.99
return bill1
def printB6(event, bill1, bill2):
sumTotal = (bill1 + bill2)
f = open('myfile.txt', 'a')
f.write(sumTotal)
b1 = Button(topFrame, text="B1", foreground="red")
b1.bind("<Button-1>", printB1)
答案 0 :(得分:2)
代码的最后一行绑定鼠标左键,以便在点击printB1
时调用b1
(顺便说一下,您应该使用...foreground="red", command=printB1)
)。当您单击Tkinter中的Button
小部件时,它会调用您绑定到它的功能。它不会自己添加任何参数(这在Tkinter中并非如此,例如单击Canvas
对象会自动传递event
。由于指定的函数需要两个参数,并且您没有传递任何参数,因此它会为您提供所看到的错误。如果该函数需要event
和bill1
......它们在哪里?您认为它们来自哪里?您需要使用包装函数向command
添加适当的参数,或者从printB1
中删除参数。
答案 1 :(得分:1)
从代码判断,您似乎正在使用tkinter
GUI框架。
您遇到的具体问题是在bind
调用中 - 您指定的函数回调完全采用两个参数(即event
和{{1} }),但bill1
只传递一个参数(bind
)。这是因为event
仅将与对象交互时触发的事件传递给函数bind
。这是设计的:如果你想访问属性的值,我怀疑你正在做,there are other ways to go about doing this。有关更清晰的信息,请参阅this example,以及事件对象方法的说明。
换句话说,废弃printB1
参数,因为bill1
永远不会传递该值。您将不得不弄清楚如何重写代码以执行您想要的操作 - 实际上,代码中存在太多问题需要解决。