4

画像処理を実行するプログラムを作成していますが、メイン処理が発生する前に、ユーザーが入力画像にいくつかのマーカーを入力する必要があります。これは Python/Numpy/Scipy と PyGTK で行われています。

これを可能にする方法として、GUI を開き、メインループから値を取り戻そうとする小さなスクリプトを試してみましたが、うまくいきません。

import gtk

def getGuiInput(var):
    window = gtk.Window()

    button = gtk.Button('Will <var> be set to 10?')
    window.add(button)

    def submit(widget, event, var):
        var = 10
        gtk.main_quit()

    button.connect('button-press-event', submit, var)

    window.set_position(gtk.WIN_POS_CENTER)
    window.show_all()
    gtk.main()

var = 0
print "before, var is %d" % var
getGuiInput(var)
print "after, var is %d" % var

ウィジェットの作成とレイアウト、イベントの接続、コールバックとイベント ハンドラーの使用にかなり精通しています。

私が知りたいのは、すべてを関数内に配置して、メインスクリプトでそれを呼び出して「入力ウィンドウ GUI」を開き、完了すると呼び出し元に値を返す方法です。gtk.main() 内から値を取得するにはどうすればよいですか?

編集:1つの回答で与えられた提案に従って、ウィンドウウィジェットをダイアログウィジェットに交換しましたが、それでも欲しいものが得られません:

import gtk

def run(var):

    dialog = gtk.Dialog("Entre em action")
    dialog.response(1)
    button = gtk.Button('Will <var> be set to 10?')
    dialog.add_action_widget(button, 1)
    button.show()

    def submit(widget, event, var):
        print var
        var = 10

    button.connect('button-press-event', submit, var)

    dialog.run()


var = 0
print "before, var is %d" % var

result = run(var)
print result

print "after, var is %d" % var

読んでくれてありがとう。概念上の欠陥があれば訂正してください。

4

1 に答える 1

2

関数内から、その 1 つのダイアログに制限された 2 番目の GTK メイン ループを実行するとしてウィンドウgtk.Dialogを作成できます。dialog.run()(これは、2 次ループの実行中は、プログラム内の他のウィンドウと対話できないことを意味します。)

応答 ID を指定してダイアログにボタンを追加するか、値を指定して呼び出すdialog.response()と、その値が の戻り値になりdialog.run()ます。

dialog.add_action_widget(button, 10)
# ...
print 'var is', var
var = dialog.run()
print 'var is now', var  # should be 10 if you clicked the button
于 2012-08-15T13:49:35.033 に答える