python - 无法停止 while 循环并更改函数中的 var

标签 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()

最佳答案

多处理 需要非常特殊的编程风格。你可以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/

相关文章:

python - 当我使用python打开URL(维基百科)时,如何得到“ERR_ACCESS_DENIED”?

python - Pandas - 从行中提取文本

python - python线程中的无限循环

javascript - 如何确保我的 while 循环不会破坏我的条件?

python - 有条件地合并或删除列表中的元组

python - 机器学习分类数据集设置

NLTK Stanford POS 标记器中的 Java 命令失败

javascript - 为什么我在</script>上收到错误消息?错误是( Uncaught SyntaxError : Unexpected end of input)

python - Python中的嵌套并行

python - Matplotlib 在方法和日期时间之间填充