我正在使用Tkinter
用于UI的程序。我正在编写代码来重复播放音频。我正在使用pygame.mixer.music()
播放音频。
在UI中我创建了两个按钮("开始"和"停止")。我将一个包含循环结构的方法附加到开始按钮,这样当按下开始按钮时,循环将被执行并重复开始播放音频。现在我不知道如何附加停止按钮。就像,当按下“停止”按钮时,控件应退出循环。我可以使用中断或其他类似的东西吗?我完全不了解中断的概念。为了继续,请帮助我解决什么样的中断,什么是库,等等。如果没有,请帮助我如何继续停止按钮。
这是我的代码:
from pygame import *
from Tkinter import *
import time
root = Tk()
root.geometry("1000x200")
root.title("sampler")
m=1
n=1
mixer.init()
def play():
while m==1:
print 'playing'
mixer.music.load('audio 1.mp3')
mixer.music.play()
time.sleep(n)
start = Button(root, text="play", command = play)
start.pack()
stop = Button(root, text="Stop")
stop.pack()
mainloop()
n
定义每个循环播放音频的时间。
答案 0 :(得分:1)
Python并不完全支持中断,最接近的可能是某种信号处理程序,它通过其signal
库得到支持。然而,它们可能无法与Tkinter(或pygame
)一起使用,所以我认为这不是一个好方法 - 无论如何它们并不是真正必要的,因为您想要做的事情可以在Tkinter的{Txinter'中处理{1}}。
虽然看起来有些复杂,但我建议实现它的方法是将大部分播放控制功能封装在单个Python mainloop()
中。这将减少全局变量的使用,这将使程序更容易调试和进一步开发(因为面向对象编程的许多优点 - 又称OOP)。
下面说明我的意思。注意,我使用的是Python 3,因此必须对代码进行一些额外的更改才能使用该版本。我不确定,但是这个版本也应该在Python 2中工作,除非您需要更改Tkinter模块的class
。
import
答案 1 :(得分:0)
您需要在按钮上添加命令... stop = Button(root, text="Stop", command=stop)
答案 2 :(得分:0)
添加一个停止命令可能无法正常工作,因为无限循环的结构方式,单击游戏时无法与tkinter界面交互。尝试重构你的程序:
from Tkinter import *
from pygame import *
import time
import threading
switch = True
root = Tk()
n = 1
mixer.init()
root.geometry("1000x200")
root.title("sampler")
def play():
def run():
while switch:
print 'playing'
mixer.music.load('audio 1.mp3')
mixer.music.play()
time.sleep(n)
if not switch:
break
thread = threading.Thread(target=run)
thread.start()
def switch_on():
global switch
switch = True
play()
def switch_off():
global switch
switch = False
def kill():
root.destroy()
onbutton = Button(root, text="Play", command=switch_on)
onbutton.pack()
offbutton = Button(root, text="Stop", command=switch_off)
offbutton.pack()
killbutton = Button(root, text="Kill", command=kill)
killbutton.pack()
root.mainloop()
这样tkinter按钮在不同的线程上运行,所以当一个循环时,你仍然可以与另一个进行交互。