在Python中访问函数的返回值直接传递给另一个函数

时间:2011-12-07 23:38:30

标签: python pygtk

我正在根据另一个SO问题中的代码测试一个简单的示例PyGTK应用程序:How to set default button in 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 个答案:

答案 0 :(得分: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