python,TK实时更新并发出提示声音

问题遇到的现象和发生背景

运行久了会卡死

问题相关代码,请勿粘贴截图
import tkinter as tk
import tkinter.ttk as ttk
from time import strftime
import time
import winsound

root = tk.Tk()
root.title('电子时钟')
root.resizable(True, True)

def get_time():
     local_time = strftime('%H:%M  %p')
     LB_1.config(text=local_time)
     root.after(1000, get_time)
     

LB_1 = ttk.Label(root, font=('微软雅黑', 20, 'bold'), anchor=tk.CENTER, background='#008CBA', foreground='white')
LB_1.pack(fill=tk.BOTH, expand=True)
get_time() 

ass=LB_1.cget("text")

def sound():
     aa=LB_1.cget("text")
     #print(ass)
     time.sleep(1)
     get_time() 
     bb=LB_1.cget("text")
     #print(as2)
     if aa != bb:
        print("LB_1内容更新!!!")
        winsound.Beep(3000, 3000)
     root.after(1000, sound)

sound()

root.mainloop()


运行结果及报错内容

after又调用after 导致栈一直在堆叠

我的解答思路和尝试过的方法
我想要达到的结果

LB_1(Label)里面的内容每发生变化 系统会发出声音

下有代码,可直接复制使用。如有帮助,敬请采纳,你的采纳是我前进的动力,O(∩_∩)O谢谢!!!!!!!!

img

import tkinter as tk
import time
import winsound

class Clock():
    def __init__(self):
        self.root = tk.Tk()
        self.label = tk.Label(text="", font=('Helvetica', 48), fg='red')
        self.label.pack()
        self.old_time = ''  # 记录旧的时间
        self.update_clock_and_sound_beep()
        self.root.mainloop()

    def update_clock_and_sound_beep(self):
        now = time.strftime("%H:%M:%S")
        self.label.configure(text=now)
        if self.old_time != now:
            print("内容更新!!!", now)
            winsound.Beep(3000, 3000)
            self.old_time = now
        self.root.after(1000, self.update_clock_and_sound_beep)
 Clock()

为什么要嵌套after呢,导致定时器越来越多。在一个定时器里不是可以完成吗?

def get_time():
     aa = LB_1.cget("text")
     local_time = strftime('%H:%M  %p')
     LB_1.config(text=local_time)
     if aa!=local_time:
         print("LB_1内容更新!!!")
         winsound.Beep(3000, 3000)
     root.after(1000, get_time)
     
LB_1 = ttk.Label(root, font=('微软雅黑', 20, 'bold'), anchor=tk.CENTER, background='#008CBA', foreground='white')
LB_1.pack(fill=tk.BOTH, expand=True)
local_time = strftime('%H:%M  %p')
LB_1.config(text=local_time)
get_time() 

Tkinter 本来就很缓慢,很难用,Python 开发图形用户界面建议选择 PyQt 或者 WxPython
望采纳。

检查漏动。设置定时不需要太多。Python 开发图形用户界面建议选择 PyQt 。

https://ask.csdn.net/questions/759470?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-1-759470-ask-7760104.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-ask-2~default~OPENSEARCH~Rate-1-759470-ask-7760104.pc_feed_download_top3ask

python,TK实时更新并发出提示声音


import winsound
duration = 1500  # millisecond
freq = 440  # Hz
winsound.Beep(freq, duration)
winsound.Beep(500, 5000)