无法在循环中使用已更改的var from函数停止

2024-06-30 05:15:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个警报,弹出一个窗口时,计时器是0这也启动了一个声音,而循环,所以它继续播放,而窗口是打开的。不过,我想它停止时,按下一个按钮。如何在赋值之外的循环中使用变量的更改值(通过按下按钮完成)

我一直在尝试不同的东西,这是我的测试文件的最新版本:

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

Tags: 声音targetclosedefroot警报process按钮
1条回答
网友
1楼 · 发布于 2024-06-30 05:15:11

multiprocessing需要一种非常特殊的编程风格。您可以share state between processes,但它需要使用^{} 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()

相关问题 更多 >