From 65b6617a5f9249a48fc79f5d44881b2fb49581fa Mon Sep 17 00:00:00 2001 From: Shuming Liu Date: Thu, 10 Sep 2026 10:02:01 +0800 Subject: [PATCH] fixed a bug --- media_player.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/media_player.py b/media_player.py index 7200d60..6c58cbd 100644 --- a/media_player.py +++ b/media_player.py @@ -901,6 +901,7 @@ class MediaPlayerApp(tk.Tk): self._controls_media_path = None self._generation_token = 0 self._explanation_window = None + self._explanation_text = None self._explanation_generation = 0 self.engine = self._create_engine() @@ -2030,8 +2031,15 @@ class MediaPlayerApp(tk.Tk): text = tk.Text(frame, wrap="word", state="disabled", relief="flat", background="#f6f6f6") text.grid(row=1, column=0, sticky="nsew") text.insert("1.0", "AI 正在讲解这句话…") - ttk.Button(frame, text="关闭", command=window.destroy, takefocus=0).grid(row=2, column=0, sticky="e", pady=(10, 0)) + self._explanation_text = text + ttk.Button( + frame, + text="关闭", + command=lambda: self._close_explanation(generation), + takefocus=0, + ).grid(row=2, column=0, sticky="e", pady=(10, 0)) self._explanation_window = window + window.protocol("WM_DELETE_WINDOW", lambda: self._close_explanation(generation)) path = self._current_path() or "" course_title = Path(path).stem @@ -2056,7 +2064,7 @@ class MediaPlayerApp(tk.Tk): self.server_url + "/api/v1/sentences/explain", headers=headers, json=payload, - timeout=(15, 90), + timeout=(15, 180), ) if response.status_code == 401: raise RuntimeError("登录已过期,请在“服务…”中重新登录") @@ -2074,15 +2082,28 @@ class MediaPlayerApp(tk.Tk): window = self._explanation_window if window is None: return + text = self._explanation_text + if text is None: + return try: - text = window.nametowidget(window.grid_slaves(row=1, column=0)[0]) text.configure(state="normal") text.delete("1.0", "end") text.insert("1.0", explanation) text.configure(state="disabled") if error: window.title("AI 讲解失败") - except (tk.TclError, IndexError): + self.status_var.set(explanation) + except tk.TclError: + pass + + def _close_explanation(self, generation): + self._explanation_generation = max(self._explanation_generation, generation + 1) + window = self._explanation_window + self._explanation_window = None + self._explanation_text = None + try: + window.destroy() + except (tk.TclError, AttributeError): pass def _update_status(self):