Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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 使用lambda函数连接计算器程序中的按钮,并在输入后显示值_Python_Lambda_Pygtk - Fatal编程技术网

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

Python 使用lambda函数连接计算器程序中的按钮,并在输入后显示值,python,lambda,pygtk,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) 所以我基本上想在点击时计算两个数字,但在此之前,我想在条

所以我尝试使用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)
所以我基本上想在点击时计算两个数字,但在此之前,我想在条目中显示它们。但当我点击按钮1时,它不会显示在文本条目中。这基本上就是我需要解决的问题。我认为按钮点击功能应该适用于所有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函数的方法正确吗?如果没有,我该如何更改代码?

既然您已经多次问过类似的问题,那么基本上是这样的:

#!/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()

lambda事件:self.button\u clicked事件,1,button1不按原样执行任何操作。你能修好你的压痕吗?因为它是完全关闭的。如果当你点击它时,按钮做了你想让它做的事情,那么你做的是正确的。这是一个更可靠的测试,然后在堆栈溢出上发布代码,并询问不知道您想做什么的人,如果您已经做了您想做的事情。如果您自己的测试失败,请发布一个问题,描述它是如何失败的。我编辑了我的问题,希望它能澄清我的问题。单击按钮没有任何作用,因为您没有附加任何单击处理程序。你创建一个lambda,然后扔掉它。您需要实际将其添加为回调,例如:button1.connect'clicked',lambda。。。