Для реализации выпадающего меню вы можете использовать угловой материал Использовать компонент автозаполнения для ui
Демо-шаблон
HTML
blockquote>
Теперь для поиска в массиве строки (в этом примере
all[]
) вы можете использовать эту логикуЗдесь я Я использую регулярное выражение для соответствия любой подстроке этих строк в массиве
Тип машинописного текста
blockquote>export class AppComponent { myControl = new FormControl(); options: string[] = []; data : any; constructor() { } public updated() { this.options = []; if (this.myControl.value.length > 0) { let all = ['John', 'Jenny', 'Jonson'] let searchedWord = this.myControl.value for(let key in all) { let r = all[key].search(new RegExp(searchedWord, "i")); if (r != -1) { this.options.push(all[key]) } } } else { this.options = [] } } }
Рабочий пример: stackblitz
Попробуйте:
while True:
frame = vs.read()
cv2.imshow("Frame", frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
cv2.destroyAllWindows()
vs.stop()
Честно говоря, я не совсем понимаю, что вы хотите сделать. Вы хотите ждать каждые 30 секунд, прежде чем делать еще одну фотографию? Кажется, ваш код прерывается в цикле и в условии if, и в состоянии else
РЕДАКТИРОВАТЬ: поток 30 с
2 Опция
1) для потока 30 с, вам нужно посчитать количество кадров в секунду и разрыв после достижения fps * 30 петель.
2) создать переменную флага и функцию тайм-аута
flag = 0
def timeout(sleep):
time.sleep(sleep)
flag = 1
threading.Thread(target = timetout, args=(30,)).start()
# in your loop then break when
if flag == 1:
break