【发布时间】:2015-06-11 11:08:49
【问题描述】:
我正在尝试从一个单独的线程运行我的 Psychopy 窗口并从另一个线程控制其上显示的内容,但我得到的只是致命的 Python 错误。
这是一个小示例脚本,它产生的结果与我的大脚本相同
from threading import Thread
from psychopy import visual, core
import time
class ThreadTest(Thread):
def __init__(self):
Thread.__init__(self)
self.text='Test'
self.running = 1
self.start()
print 'doing stuff'
def run(self):
win = visual.Window()
msg = visual.TextStim(win, text=self.text)
while self.running:
msg.setText(self.text)
msg.draw()
win.flip()
print 'Drawing...'
core.wait(2)
win.close()
print 'Stopping thread'
def setText(self, text):
self.text=text
def stopTest(self):
self.running = 0
def main():
tt = ThreadTest()
time.sleep(3)
tt.setText('Test2')
time.sleep(3)
tt.stopTest()
print 'Stopping main thread'
if __name__ == '__main__':
main()
和输出
python testy.py
doing stuff
Fatal Python error: (pygame parachute) Segmentation Fault
Aborted (core dumped)
这会创建 Psychopy 窗口,但无法在其上显示任何文本,然后就崩溃了。我也尝试在__init__() 中创建窗口,但这也不起作用。
【问题讨论】:
-
看来问题出在 TextStim 上,因为当我将
msg = visual.TextStim(win, text=self.text)更改为msg = visual.Rect(win)并删除msg.setText(self.text)时,程序正常工作。差不多了,当程序关闭时它仍然崩溃。 -
另外,如果我在
__init__中初始化 TextStim 然后不调用msg.setText()程序在停止之前不会崩溃,但是 Psychopy 窗口中没有显示文本。如果我尝试更改线程中的文本,程序会崩溃。