From 3450e97dadac0ad6759091c66b0efeded3d91610 Mon Sep 17 00:00:00 2001 From: hand_gesturer_ecognition <3023667994@qq.com> Date: Mon, 3 Jun 2024 23:35:05 +0800 Subject: [PATCH] 0603 --- gui.py | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/gui.py b/gui.py index 235164c6..29722253 100644 --- a/gui.py +++ b/gui.py @@ -4,12 +4,16 @@ from tkinter import ttk from PIL import Image, ImageTk import numpy as np import subprocess -from gesture_recognition import start_recognition, stop_recognition, release_camera, keep_running, reset_hand_detection +from gesture_recognition import start_recognition, stop_recognition, release_camera, reset_hand_detection WINDOW_WIDTH = 800 WINDOW_HEIGHT = 705 main_launched = False status_label = None +root = None +popup_open = False +paused = False +ten_fingers_detected = False def main(): """显示欢迎屏幕""" @@ -83,11 +87,12 @@ def show_main_screen(): def start_thread(root, canvas, status_label): """启动识别线程""" - global keep_running, paused, popup_open - if not keep_running: + global paused, popup_open, ten_fingers_detected + if not paused: status_label.config(text="正在识别...") paused = False popup_open = False + ten_fingers_detected = False threading.Thread(target=lambda: start_recognition(callback=lambda fingers, img: root.after(0, update_canvas, canvas, fingers, img))).start() def stop_recognition_with_label(status_label): @@ -100,10 +105,14 @@ def exit_program(): global window stop_recognition() release_camera() - window.destroy() + if window is not None: + window.destroy() + window = None def update_canvas(canvas, fingers, img): """更新画布显示图像或处理手指数""" + if root is None or not root.winfo_exists(): + return if isinstance(img, np.ndarray): img = Image.fromarray(img) imgtk = ImageTk.PhotoImage(image=img) @@ -114,15 +123,15 @@ def update_canvas(canvas, fingers, img): def handle_finger_detection(finger_count): """处理检测到的手指数""" - global paused, popup_open, main_launched + global paused, popup_open, main_launched, ten_fingers_detected if finger_count == 10 and not main_launched: main_launched = True + ten_fingers_detected = True launch_main_script() - elif not popup_open: - if finger_count == 5: - paused = True - popup_open = True - show_stop_recognition_window() + elif finger_count == 5 and not ten_fingers_detected and not popup_open: + paused = True + popup_open = True + show_stop_recognition_window() def launch_main_script(): """启动 main.py 脚本""" @@ -146,7 +155,7 @@ def show_stop_recognition_window(): popup_open = False stop_window.destroy() - if root and root.winfo_exists(): + if root is not None and root.winfo_exists(): stop_window = Toplevel(root) stop_window.title("停止识别")