关于lambda和eval与一些Python计算器GUI-cod的关系的问题

2024-07-02 13:12:17 发布

您现在位置:Python中文网/ 问答频道 /正文

首先是一些代码

    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,和存储对象包. 我也不完全理解实际的计算是在哪里执行的,我会假设它在EqualsButton块中,特别是两个lambda语句中,尽管我熟悉很多语法,但我还是不能理解lambda实际上在做什么。我用C语言编写了一个计算器,它相当直观,但是当涉及到这个python代码时,我不知道我在看什么,或者我应该找什么。如果有人给我一个简短的介绍就好了。新来的编程,所以请原谅豌豆脑。你知道吗

编辑:剪切一些不相关的代码。已经有很好的答案了谢谢。我可以PM的所有人想要它的完整程序。你知道吗


Tags: lambda代码textselfsourcedefdisplaybutton
1条回答
网友
1楼 · 发布于 2024-07-02 13:12:17

分配的变量就是这样。由编码器分配。我有一个变量\u name=object。如果在某个点上使用了特定于Tkinter的变量,那么很可能是Tkinter方法的参数中使用的伪常量。永远不要尝试更改tkinter库中的预定义变量。你知道吗

pack()部分只是将Frame对象放在用户要查看的根窗口中。你知道吗

pack()是一组几何管理器的一部分,用于在GUI上放置对象,如框架、文本框或输入字段等。有关pack()或任何几何图形管理器的详细信息,请参见tkinter文档。你知道吗

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

至于计算实际发生的位置是eval操作。 这是用于执行实际计算的代码。你知道吗

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

此方法具体用于执行计算:

eval(display.get())

由于eval对于较新的程序员或对python不熟悉的程序员来说并不常见,因此我可以看出您是如何不确定在哪里可以计算它的,但是函数名应该是一个线索,因为calccalculationcalculate的缩写。你知道吗

相关问题 更多 >