2017-09-23 2 views
0

나는 현재 많은 일을하는 GUI (Tkinter로 쓰는)를 만드는 스크립트를 작성 중이다. 그 중에는 카메라로 미리보기를 시작한 다음이 모터를 앞뒤로 자유롭게 움직일 수있는 기능이 있습니다. 불행히도, 미리보기는 GUI가 실행 중일 때 다른 작업을 수행하지 못하도록 차단합니다. 주위에 어떤 방법이 있습니까? 이상적인 세계에서는 백그라운드에서 실행되는 미리보기로 GUI 버튼을 눌러 모터를 앞뒤로 움직이고 능동적 인 피드백을 제공 할 수 있습니다. 내 코드 중 일부는 다음과 같습니다.Raspberry Pi - 미리보기가 실행되는 동안 다른 작업을 수행하는 방법?

def motorOut(): 
    backwards(int(delayf)/1000.0, int(stepsf)) 
    setStep(0,0,0,0) 

def motorIn(): 
    forward(int(delayb)/1000.0, int(stepsb)) 
    setStep(0,0,0,0) 

def cameraPreview(): 

    camera.start_preview(fullscreen=False, window = (400, 240, 400, 240)) 
    sleep(20) 
    camera.stop_preview() 

어떤 도움을 주셔서 감사합니다!

답변

1

프로그램을 차단하는 미리보기가 아니지만 sleep(20)을 사용하는 것이 좋습니다.

'수면'이 발생하는 동안 다른 사람이 처리 할 수 ​​없습니다. 이것은 당신이 알아 차리고있는 블록을 일으킨다. 해당 줄을 제거하고 camera.stop_preview()을 이벤트 (예 : 키 누름)에 바인딩하여 문제를 해결할 수 있습니다. 이것은 볼 수 있었다 같은 : root 당신이 Tk()에 대한 액세스로 정의하는 것입니다

root.bind("<space>", lambda e: camera.stop_preview()) 

. lambda e:은 인라인 함수 표현식을 지정합니다. 여기서 e은 전달 된 이벤트 객체입니다.

+0

작동합니다! 대부분의 경우 ... 잠자기 대신 코드를 넣으면 다른 버튼을 클릭 할 수있게되지만 지금은 미리보기를 끝낼 수 없습니다. 그것은 화면의 오른쪽 하단에있는 작은 사각형이기 때문에 큰 문제는 아니지만 이것을 해결하기 위해 루트를 Tk()에 액세스하는 것으로 정의하는 방법은 무엇입니까? 죄송합니다. 저는 초보 프로그래머입니다. – NeonCop

+0

Tkinter를 사용할 때 프로그램 시작시 거의 항상'root = Tk()'를 정의하여'bind'와 같은 다양한 Tk 함수/메소드를 참조 할 수 있습니다. 다행이 도움이! 물론 – SneakyTurtle

+0

아! 나는 그것을이기라고 불렀고, 그래서 나는 단지 뿌리를 승리로 바꾸었고 그것은 매력처럼 일했습니다. 너무 고마워! – NeonCop