使用lambda函数连接计算器程序中的按钮并在输入后显示值

时间:2017-01-02 16:37:34

标签: python lambda pygtk

所以我尝试使用lambda函数将计算器的按钮与函数连接起来。以下是我的一些代码:

button1 = Gtk.Button(label = "1")
lambda event: self.button_clicked(event, "1"), button1
vbox.pack_start(button1 ,True, True, 0)
vbox.pack_end(button1,True,True,0)
self.add(button1)

所以我基本上想要在点击它们时计算两个数字,但在此之前我想在条目中显示它们。但是,当我点击button1时,它不会显示在文本条目中。这基本上是我需要解决的问题。我认为button_clicked函数应该适用于所有ifs。这基本上是我的问题。

def button_clicked(self, value):
    if (value != None):
        if (value != "="):
            # Add something to the text
            self.entry.set_text(self.entry.get_text() + str(value))
        else:
            # Evaluate the text
            self.result = eval(self.entry.get_text())
            self.entry.set_text(self.result)
    else:
        # Clear the text
        self.entry.set_text("")

我是否以正确的方式使用lambda函数?如果不是,我怎么能改变代码?

1 个答案:

答案 0 :(得分:0)

由于您现在多次提出类似问题,因此基本上看起来就是这样:

#!/usr/bin/env python3
from gi.repository import Gtk

class Window(Gtk.Window):
    def __init__(self):
        super().__init__()
        self.connect('delete-event', Gtk.main_quit)

        grid = Gtk.Grid()
        for i in range(10):
            button = Gtk.Button(label=str(i))
            button.connect('clicked', self.number_clicked, i)
            grid.attach(button, i%3, i//3, 1, 1)

        self.entry = Gtk.Entry()
        button = Gtk.Button(label='=')
        button.connect('clicked', self.solve_clicked)
        vbox = Gtk.VBox()
        vbox.pack_start(self.entry, False, False, 0)
        vbox.pack_start(grid, True, True, 0)
        vbox.pack_start(button, False, False, 0)

        self.add(vbox)
        self.show_all()

    def number_clicked(self, button, i):
        self.entry.set_text(self.entry.get_text() + str(i))

    def solve_clicked(self, button):
        # here should be the parser for the mathematical expression
        pass


if __name__ == '__main__':
    Window()
    Gtk.main()