我制作了一个闹钟,当计时器为 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()
最佳答案
多处理
需要非常特殊的编程风格。你可以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()
关于python - 无法停止 while 循环并更改函数中的 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52561688/