2017-03-05 6 views
1

私は自己教育の行き届いていないプログラミングバングラーですので、邪悪なコーディングと一般的な無知を許してください。コールバック関数内の値にアクセスする

CADモデルのポイントにアクセスするためのAPIを備えたFreeCADを使用しています。

class mySnapper: 
    def __init__(self): 
    self.point = None 
    def getPoint(self): 
    FreeCADGui.Snapper.getPoint(callback=self.clicked) 
    def clicked(self,point,extra): 
    self.point = point 
    print point 
s = mySnapper() 
s.getPoint() 
print "point outside is:",s.point 
print "~~~~" 

これは私に次のような結果が得られます。外

点がある:なし

~~~~

ベクトル(320.0、-3414.0、168.15)

明らかに、クラスポイントが選択される前にクラス関数が返されますポイント値は「なし」)。

ポイントが選択されると、ベクトル値が出力されますが、この時点でクラス関数はすでに返されているため、実際には使用できません。

「クリック」コールバック関数内の値にはどのようにアクセスできますか?更新されたグローバル変数をインスタンス化することは可能でしょうか?

私は値が設定されるまで

答えて

0

がポーリングしてみてください...これは理にかなって願っています:あなたの入力のための

import time 
class mySnapper: 
    def __init__(self): 
    self.point = None 
    def getPoint(self): 
     FreeCADGui.Snapper.getPoint(callback=self.clicked) 
    def clicked(self,point,extra): 
     self.point = point 

s = mySnapper() 
while not s.getPoint(): 
    time.sleep(0.01) # wait for 10 ms before retrying 
print s.getPoint() # now it should print Vector(320.0, -3414.0, 168.15) 
+0

感謝を。いいえ、プログラムはスリープループに入るとハングアップします。以前は、ユーザがシーンをクリックするのを待っていました。 –

+0

別のスレッドで実行するのはどうですか? –

+0

別のスレッド?私はそれをどうやって行うのか分からない。 –

関連する問題