我试图写一个代码,功能像包括流程图,但我有问题退出最后一个循环。任何帮助是赞赏Project Flowchart。
我们通过在PySimpleGui上按下定义为“Start Detection”的按钮进入最后一个循环。我希望能够通过按下定义为“Stop Detection”的按钮退出此循环,但没有window.read()函数,我无法按下停止检测按钮,我们处于无限循环中。如果我包含窗口。read函数,代码的最后一位将只运行一次,而不是按照期望的循环。
最后一个循环的代码如下:
while(1):
event,values = window.read()
if event in (None,'Quit'):
break
elif event == 'Filter Settings':
changefitersettings()
## Put in an image for the item detection in here
print('View the Parking Lot')
elif event == 'Lot Settings':
sct_img = sct.grab(bounding_box)
getcountvalues = changeImage(x,np.array(sct_img))
Settings()
print('Lot Settings has been pressed')
window.close
elif event =='Start Detection':
while(1):
event,values = window.read()
if event == 'Stop Detection':
break
else:
sct_img = sct.grab(bounding_box)
videoimage = changeImage(x,np.array(sct_img))
#cv.imshow('hello1',videoimage[0])
ServerUpdate = UpdateServer(videoimage[1],videoimage[2],videoimage[3],videoimage[4],videoimage[5],videoimage[6],videoimage[7],videoimage[8],videoimage[9],videoimage[10],videoimage[11],videoimage[12])
k = cv.waitKey(1) & 0xFF
# press 'q' to exit
if k == ord('q'):
break
cv.destroyAllWindows()
3条答案
按热度按时间kse8i1jr1#
我们可以做一个
while
else
loop
,它依赖于event
not
是'Stop Detection'
:虽然
window.read()
必须在每个loop
中调用两次(有点蹩脚)。webghufk2#
如果我们查看API,我们会看到:
阅读
现在,默认的
window.read()
意味着有一个无限的超时,所以你可以看到程序基本上挂起等待按键。然而,timeout
是在将timeout_key
返回到event
变量之前等待的毫秒数,类似于稍后使用cv.waitKey(1)
时的情况。所以使用如下内容:这使GUI有机会读取“停止检测”按钮上的鼠标点击。
还要注意,有一个方法
window.perform_long_operation()
可以进行后台处理,这可能是解决这个问题的更简洁的方法。bjp0bcyl3#
如果你有另一项工作要做,而且需要很长时间,最好使用多线程。
演示代码