Python中的函数

时间:2016-03-27 21:13:54

标签: python tkinter

我试图了解有关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)

2 个答案:

答案 0 :(得分:2)

代码的最后一行绑定鼠标左键,以便在点击printB1时调用b1(顺便说一下,您应该使用...foreground="red", command=printB1))。当您单击Tkinter中的Button小部件时,它会调用您绑定到它的功能。它不会自己添加任何参数(这在Tkinter中并非如此,例如单击Canvas对象会自动传递event。由于指定的函数需要两个参数,并且您没有传递任何参数,因此它会为您提供所看到的错误。如果该函数需要eventbill1 ......它们在哪里?您认为它们来自哪里?您需要使用包装函数向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永远不会传递该值。您将不得不弄清楚如何重写代码以执行您想要的操作 - 实际上,代码中存在太多问题需要解决。