使用lambda函数连接计算器程序中的按钮并在输入后显示值
Using lambda function to connect buttons in a calculator program and show values after entering
所以我正在尝试使用 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 函数的方式是否正确?如果不能,我该如何更改代码?
由于您现在已经多次问过类似的问题,所以基本上看起来是这样的:
#!/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 函数将计算器的按钮与函数连接起来。这是我的一些代码:
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 函数的方式是否正确?如果不能,我该如何更改代码?
由于您现在已经多次问过类似的问题,所以基本上看起来是这样的:
#!/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()