2016-04-08 28 views
3

OpenCV ile bir hayvan izleme programı üzerinde çalışıyorum. Hayvan tanındığında, bazı şekilleri çizmek ve belirli sayıda saniyeliğine bunları önüne yansıtmak istiyorum. Şekilleri çizmek ve bunları yansıtmak için kullanıyorum PsychoPyİplik uygulaması uygulamayı durdurur

Hayvanı aldığımda ve PsychoPy ile çizim işlevini çağırdığımda, şekil kayboluncaya kadar program donar. Bunu çözmek için Threading'i kullandım, ancak programın "Python beklenmedik bir şekilde çıkmasını" söyleyen bir sistem mesajıyla tamamen durur. İşte

Ben iplik açıyorum nasıl:

t = threading.Thread(target=stimulus_controller.draw, args=(stimulus_view, 20)) 
t.setDaemon(True) 
t.start() 
stimulus_view Çizmek istiyorum şekillerin bir dizi olan

ve 20 uyarıcı göstermeye saniye sayısıdır.

def draw(stims, time): 

    trialClock = core.Clock() 

    while t < time: 
     t = trialClock.getTime() 
     for s in stims: 
      s.draw() 

     myWin.flip() 

Çok basit ama beklenmedik durdurma tutar:

Ve bu çizim kodu!

Çok teşekkür ederim.

+0

Ana pencereden değil, işçiden pencere oluşturmaya çalışın – Tibo

+0

Yea, anlamlıdır! Doğrudan deneyeceğim. Teşekkür –

+0

Mükemmel çalıştı: D Yardımlarınız için çok teşekkür ederim. –

cevap

3

Genelde, pencere oluşturma araç takımları farklı iş parçacıklarından (bu genellikle altyazı işletim sisteminin çalışma biçiminden kaynaklanır) kullanılmayı sevmez ve PsychoPy bir istisna değildir. Her zaman belgelenmez, ancak çoğunlukla tek bir iş parçacığı (ana iş parçacığı veya çalışan iş parçacığı olması) pencereyle etkileşime girdiğinde, bunları iş parçacığıyla kullanmak mümkündür.

Pencereyle "etkileşimde bulunma" penceresi üç şeydir: onu oluşturma, içine çizim yapma ve olayları ona gönderme/alma. Örneğinizde, çalışan iş parçacığından çiziyorsunuz, ancak pencereyi ana iş parçacığından oluşturdunuz - dolayısıyla çöküyor.

Pencereyi iş parçacığı içinden oluşturursanız, iyi olmalısınız. Ayrıca, olayları kullanmayı düşünüyorsanız, bunu yalnızca işçiden yapın (bazı araç takımları, ör. WxWidgets, diğer iş parçacıklarının olayları göndermesine izin vermek için temel öğelere sahip, bazıları da sığınmayı örneğin bir sıra kullanarak yapmanızı gerektirir).

+0

Mükemmel bir şekilde açıkladı: D Çok teşekkür ederim. –