2011-12-07 11 views
2

私は別のSO質問のコードに基づいて簡単なサンプルPyGTKアプリケーションをテストします:How to set default button in PyGTK?Pythonで他の関数に直接渡された関数の戻り値へのアクセス

しかし、私は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のアプローチを知ることに興味があると思いますけれども、それは、ここで役に立つだろう。

答えて

2

クラスを使用する必要があります。これは完全なコードではありません。

+0

実際には、クラス内で定義されたオブジェクトのメソッドとしてコールバック関数を保持する必要があります。そのため、関数は、そのオブジェクトの内外の任意のコードがその属性を読み取ることができる。 – jsbueno

関連する問題