在Python中直接传入另一个函数的函数返回值

2 投票
1 回答
866 浏览
提问于 2025-04-17 07:56

我正在测试一个简单的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

撰写回答