所以我尝试使用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函数?如果不是,我怎么能改变代码?
答案 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()