2017-09-23 41 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.bind("<space>", lambda e: camera.stop_preview()) 

哪裏root是你定義爲你的訪問Tk()lambda e:指定一個內聯函數表達式,其中e是傳遞的事件對象。

+0

它的工作原理!大多數情況下...我把代碼放在睡眠中,而現在它可以讓我點擊其他按鈕,但現在我無法退出預覽。這不是一個大問題,因爲它只是我屏幕右下方的一個小方塊,但是如何將root定義爲我對Tk()的訪問來解決這個問題?對於我是初學者程序員的問題抱歉。 – NeonCop

+0

使用Tkinter時,在程序的開始幾乎所有的時候都要定義'root = Tk()'來引用各種Tk函數/方法,比如'bind'。很高興這有助於! – SneakyTurtle

+0

啊,當然!我稱之爲勝利,所以我用勝利取代了根,並且它像魅力一樣工作。非常感謝你! – NeonCop