Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与某些Python计算器GUI代码有关的lambda和eval问题_Python_User Interface_Tkinter_Calculator - Fatal编程技术网

与某些Python计算器GUI代码有关的lambda和eval问题

与某些Python计算器GUI代码有关的lambda和eval问题,python,user-interface,tkinter,calculator,Python,User Interface,Tkinter,Calculator,首先,这里是一些代码 from Tkinter import* def button (source, side, text, command = None) : storeObj = Button(source, text=text, command=command) storeObj.pack(side=side, expand=YES, fill=BOTH) return storeObj EqualsButton = Calculat

首先,这里是一些代码

    from Tkinter import*


def button (source, side, text, command = None) :
    storeObj = Button(source, text=text, command=command)
    storeObj.pack(side=side, expand=YES, fill=BOTH)
    return storeObj

        EqualsButton = Calculator(self, TOP)
        for Equals in '=':
            if Equals == '=':
                btnEquals = button(EqualsButton, LEFT, Equals)
                btnEquals.bind('<ButtonRelease-1>',
                               lambda e, s=self, storeObj=display: s.calc(storeObj), '+')
            else:
                btnEquals = button(EqualsButton, LEFT, Equals,
                                   lambda storeObj=display, s=' %s ' %Equals: storeObj.set(storeObj.get()+s))

    def calc(self, display):
        try:
            display.set(eval(display.get()))
        except:
            display.set("ERROR")


if __name__ == '__main__':
    app().mainloop()
我了解前几个模块中的大部分,我可以稍后调用这些函数来构建计算器,即按钮和框架。我不理解的东西,也没有对storeObj和storeObj.pack等语法的解释。我也不完全理解实际的计算是在哪里执行的,我假设它在EqualsButton块中,特别是两个lambda语句中,我无法理解lambda实际上在做什么,尽管我熟悉很多语法。我用C语言编写了一个计算器,这相当直观,但是当谈到这个python代码时,我不知道我在看什么,或者我应该找什么。如果有人能给我一个简要的说明就好了。编程新手,请原谅豌豆脑


编辑:剪切一些不相关的代码。已经有一些很好的答案了,谢谢。我可以为任何想要的人PM完整的程序。

分配的变量就是这样。由编码员指定。我有变量_name=object。如果在某一点上使用了Tkinter特定的变量,那么它很可能是Tkinter方法中的参数中使用的伪常量。永远不要试图更改tkinter库中的预定义变量

包部分只是将框架对象放置在根窗口中,供用户查看

pack是一组几何体管理器的一部分,用于在GUI上放置对象,如框架、文本框或输入字段等。包装或任何几何管理器的详细信息在tkinter文档中都有详细记录

Lambda语句也有大量的文档记录,但它们只是匿名函数。这意味着您不需要为此函数指定名称。它们也是单行函数。它们的使用在python和tkinter中很常见

至于计算实际发生的地方是eval操作。 这是用于执行实际计算的代码

def calc(self, display):
    try:
        display.set(eval(display.get()))
    except:
        display.set("ERROR")
具体而言,此方法就是执行计算的方法:

eval(display.get())

由于eval对于较新的程序员或python新手来说并不常见,我可以看出您不确定这可能是在哪里计算的,但是函数名应该是一个线索,因为calc是calculation或calculate的缩写。

我们不是导师,我们不教人们如何阅读和/或理解代码。我们只在上述代码的特定问题上提供帮助a.k.a我的代码可以做到这一点,但我希望它能做到这一点。我尝试了很多东西,想让它做我想做的,但是我没有成功,所以我请求你的帮助。如果您不理解代码的作用,您应该向其他地方寻求帮助。@ForceBru虽然标题可能看起来很宽泛,但我确实理解很多代码。我已经指定了我不理解的内容,即计算发生的位置、storeObj语法和lambda语句。有许多类似的线索要求逐行解释,并得到非常有用的信息和回答,我要求的只是其中的四分之一,不确定问题是什么!1 storeObj语法没有什么特别之处。storeObj只是一个变量。这里有什么问题?2解释lambda语法和lambda函数的用法在文档中进行了说明。3不难看出计算是在名为calc.calculation的函数中进行的。@ForceBru感谢您的回答!我假设storeObj是tkinter特有的语法,而不仅仅是一个变量,事后看来这很愚蠢,但正如我所说,我对编程非常陌生。就lambda而言,我希望有人能给出一个具体的lambda语句,例如'lambda storeObj=display,s='%s''%Equals:storeObj.setstoreObj.get+s',并用外行术语解释实际发生的情况,我会仔细研究lambda的东西,看看我是否能理解它。@ForceBru就计算而言,我的假设是基于这样一个事实,即在用户释放equals按钮后,答案就会出现,这将我吸引到了那个块,同样,我错了,这并不令人惊讶。你的回答似乎有点尖刻,希望我只是读得太多了,只是一个寻找答案的新手。无论如何,谢谢。现在一切都变得更有意义了。谢谢大家。