我发出了一个警报,当计时器为0时会弹出一个窗口,这也会启动声音的while循环,因此在窗口打开时它会继续播放。但是我希望它在按下按钮时停止。如何在赋值外的循环中使用变量的更改值(通过按按钮完成)?
我一直在尝试各种不同的事情,这是我的测试文件的最新版本:
v = True
def Close():
global root
global v
v = False
root.destroy()
def Wdow():
global root
root = Tk()
b = Button(root, text='OK', command=Close).grid()
root.mainloop()
def Sound():
global v
while v:
winsound.PlaySound('sound.wav', winsound.SND_FILENAME)
def Pstart():
if __name__ == '__main__':
Process(target=Sound).start()
Process(target=Wdow).start()
def Note():
Pstart()
答案 0 :(得分:1)
multiprocessing
需要非常特殊的编程风格。您可以share state between processes,但是它需要使用Value
class或类似的机制。普通的Python变量将不起作用。
还必须将Value
对象作为参数传递给目标函数。我无法在Windows上对此进行测试,但也许这样的方法会起作用:
def Wdow(v):
global root
root = Tk()
def Close():
global root
v.value = 1
root.destroy()
b = Button(root, text='OK', command=Close).grid()
root.mainloop()
def Sound(v):
while v.value == 0:
winsound.PlaySound('sound.wav', winsound.SND_FILENAME)
if __name__ == '__main__':
v = multiprocessing.Value('i', 0)
Process(target=Sound, args=(v,)).start()
Process(target=Wdow, args=(v,)).start()