在Python中直接传入另一个函数的函数返回值
我正在测试一个简单的PyGTK应用程序,这个程序是基于另一个StackOverflow问题中的代码:如何在PyGTK中设置默认按钮?。
不过,我现在想弄明白如何获取run()函数返回的值。我知道这个值是通过button.connect()传递的,而其他参数是在调用run()时传入的,但因为这个函数是后面才被调用的,所以我不知道怎么获取它的返回值。
def foo():
def run(button, window, entry):
try: snooze_time = int(entry.get_text())
except ValueError: snooze_time = 5
snooze_confirm_message = 'Snoozing for ' + str(snooze_time) + ' minutes'
dialog = gtk.MessageDialog(window, gtk.DIALOG_MODAL, gtk.MESSAGE_INFO, gtk.BUTTONS_OK, snooze_confirm_message)
dialog.run()
dialog.destroy()
return snooze_time
snooze_time = None #Defaults to None
window = gtk.Window()
window.connect("destroy", gtk.main_quit)
vbox = gtk.VBox(spacing = 40)
snooze_time_entry = gtk.Entry()
vbox.pack_start(snooze_time_entry)
button = gtk.Button(stock = gtk.STOCK_SAVE)
#Here the function is being passed to the button, though it is not called until later.
button.connect("clicked", run, window, snooze_time_entry)
button.set_flags(gtk.CAN_DEFAULT)
window.set_default(button)
vbox.pack_start(button)
window.add(vbox)
window.show_all()
gtk.main()
print("the result is " + str(snooze_time))
如果有更符合PyGTK习惯的解决方法,那就太好了,不过我也想知道更通用的Python处理方式。
1 个回答
2
你应该使用类。可以像这样做(这不是完整的代码):
class Demo:
def __init__(self):
self.__snooze_time = None
self.window = gtk.Window()
self.window.connect("destroy", gtk.main_quit)
self.button = gtk.Button(stock = gtk.STOCK_SAVE)
self.button.connect("clicked", self.run, window, snooze_time_entry)
def run(self, widget, event, data):
try:
self.__snooze_time = int(data.get_text())
except ValueError:
snooze_time = 5