2017-03-05 7 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

다른 스레드? 나는 어떻게하는지 알지 못한다. –