循环从功能更改为var时无法停止

时间:2018-09-28 19:34:41

标签: python python-3.x while-loop

我发出了一个警报,当计时器为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()

1 个答案:

答案 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()