我正在做Tkinter。我的函数可以正常运行(每分钟播放一次铃声),但是它不在线程上运行。每当我单击“开始”按钮时,程序窗口将灰显,并且顶部显示“没有响应”(因为我对start()的递归调用将其锁定,所以我认为是。)
我为什么不能正确穿线?谢谢。
def start():
now = tt1.time()
listOfTimes = []
for t in timeSlotEFs:
listOfTimes.append(t.get())
now = datetime.now()
timee = now.strftime('%H%M')
print('here')
for t in listOfTimes:
if t==timee:
winsound.PlaySound('newhourlychimebeg.wav',winsound.SND_FILENAME)
s.enterabs(now+60,1,start) #I want to call recursively every 60 seconds
s.run()
def start2():
t = threading.Thread(target=start)
t.run()
startBtn = Button(ssFrame, text='Start', command=start2)
startBtn.grid(row=0,column=0,padx=paddX,pady=paddY)
感觉就像您混入了threading.Thread所导入的定义之间。您应该先创建运行函数,然后创建start线程。
通过这种方式,我可以看到结果并且可以正常工作:
from tkinter import *
import threading
root = Tk()
def run():
print('hello Thread')
def start2():
t = threading.Thread(target=run)
t.start()
print(t) # Output: <Thread(Thread-1, stopped 10580)>
startBtn = Button(root, text='Start', command=start2)
startBtn.grid(row=0,column=0)
root.mainloop()