我想要一些关于制作某种“停止”按钮的基本问题,在我的例子中,它可以终止一系列的蜂鸣音:
from tkinter import *
import winsound
from random import randint
class App(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.widgets()
def widgets(self):
self.beep = Button(self, text = "Beep", command = play_beep)
self.beep.pack()
self.stop = Button(self, text = "Stop", command = stop_beep)
self.stop.pack()
go_on = True
def play_beep():
count = 10
while go_on == True and count != 0:
winsound.Beep(randint(100, 2500), 200)
count -= 1
def stop_beep():
go_on = False
root = Tk()
app = App(root)
root.mainloop()
当我按下“哔”按钮时,它和所有的图形用户界面都会卡住,直到哔声结束。谁能告诉我怎么修理它吗?在
我不使用TKinter,但我相信您的按钮按下不会创建一个单独的线程或进程。按钮卡住的原因是因为play_nu-beep循环阻塞了GUI执行循环。所以我们使用线程。线程与GUI同时执行,因此基本上可以同时执行两件事(监听GUI事件和播放哔哔声)。在
首先,您的问题与线程或进程无关。Tkinter是单螺纹的。在
如果要在tkinter程序中定期运行某个函数,则必须给事件循环一个处理事件的机会。典型的解决方案是这样做:
这将导致蜂鸣音每秒(1000毫秒)播放十次。在每次调用之间,事件循环将有机会处理其他事件。在
现在,如果您正在运行的代码需要很长时间,则必须在单独的线程或进程中运行该代码。我对
winsound.Beep
一无所知,所以我不知道这是否必要。在其次,为了能够中断它,您需要使
^{pr2}$go_on
全局化,否则您只需设置一个永远不会被使用的局部变量。在相关问题 更多 >
编程相关推荐