Застряла кнопка графического интерфейса - PullRequest
0 голосов
/ 07 мая 2018

Я создал графический интерфейс с помощью Tkinter. Он имеет три кнопки. один для захвата изображения. второй для захвата непрерывных изображений, пока я не нажму третью кнопку, т.е. кнопку остановки.

Когда я нажимаю первую кнопку, она работает нормально, т. Е. Запускается функция, которая захватывает изображение и сохраняет его в определенном месте.

Но когда я нажимаю вторую кнопку для непрерывной съемки изображений, она начинает захватывать изображения, но кнопка застревает или графический интерфейс перестает работать. из-за этого я не могу остановить этот непрерывный захват изображений, потому что я не могу нажать третью кнопку, то есть кнопку остановки.

Я выполняю цикл while для непрерывной записи изображений и могу разорвать этот цикл только в том случае, если глобальная переменная STOP будет иметь «0», а я могу только обнулить ее, нажав кнопку остановки в графическом интерфейсе. Но я не могу нажать кнопку «Стоп», чтобы сделать эту переменную STOP «0», чтобы цикл мог оборваться. Я думаю, что в то время как цикл останавливает основной цикл GUI и создает эту проблему. если у вас есть альтернатива или решение, пожалуйста, поделитесь им. это код

Вторая кнопка просто вызвать эту функцию

def capture_video():
stop = '1'
l=Lepton()
l.enter()
path="/home/ubuntu/Desktop/IR_videos/vid_"
file=open("/home/ubuntu/Desktop/IR_videos/vid_no.txt",'r')
    no=file.read()
    file.close()
folder_name=path+no
os.mkdir(folder_name)
i=0
print("Image capturing started")
    print("____Press Stop button to stop____")
while True:
    a=l.capture()
    cv2.normalize(a,a,0,65535,cv2.NORM_MINMAX)
    np.right_shift(a,8,a)
    img=np.uint8(a)
    img_name=folder_name+"/"+str(i)+".jpg"
    cv2.imwrite(img_name,img)
    i=i+1
    if stop == "0":
        print("Image capturing stoped\n")
        print("Press video button to capture again")
        break
no=int(no)+1
file=open("/home/ubuntu/Desktop/IR_videos/vid_no.txt",'w')
file.write(str(no))
file.close()
cv2.destroyAllWindows()
l.exit()

здесь lepton - это класс, а capture () - функция для захвата изображения с камеры flir lepton

и это код функции кнопки останова GUI:

def stop_it():
   lep.stop='0'
   time.sleep(1)
   lep.stop='1'

1 Ответ

0 голосов
/ 07 мая 2018

Вы должны запустить capture_video () в другом потоке, отличном от основного, чтобы основной не зависал. Таким образом, вы сможете нажать на кнопку Stop . Кроме того, убедитесь, что ваша stop переменная внутри capture_video доступна вашей функцией stop_it . В вашей capture_video переменная stop является локальной и поэтому не может быть изменена.

Вы можете найти отличный ответ о том, как запустить функцию в другом потоке, здесь: https://stackoverflow.com/a/14331755/9729313

Вот еще один пример с многопоточностью и Tkinter: https://stackoverflow.com/a/50175727/9729313

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...