- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 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
定义每次循环播放音频的时长。
最佳答案
Python 并不完全支持中断,最接近的可能是某种信号处理程序,通过它的 signal
支持。图书馆。然而,它们可能不适用于 Tkinter(或 pygame
),所以我认为这不是一个好方法——而且它们也不是必需的,因为你可以处理你想做的事情在 Tkinter 的 mainloop()
中。
虽然它可能看起来有些复杂,但我建议的实现方式是将大部分播放控制功能封装在一个 Python class
中。这将减少全局变量的使用,这将使程序更易于调试和进一步开发(因为面向对象编程的许多优点 — 也称为 OOP)。
下面说明了我的意思。请注意,我使用的是 Python 3,因此必须对您的代码进行一些额外的更改才能使其适用于该版本。我不确定,但这个版本应该也能在 Python 2 中工作,除非你需要按照指示更改 Tkinter 模块的 import
。
from pygame import *
from tkinter import * # Change to "from Tkinter import *" for Python 2.x.
class PlayController(object):
def __init__(self, mixer, music_filename, polling_delay):
self.mixer = mixer
self.music_filename = music_filename
self.polling_delay = polling_delay # In milliseconds.
self.playing = False
def play(self):
if self.playing:
self.stop()
self.mixer.music.load(self.music_filename)
self.mixer.music.play(-1) # -1 means to loop indefinitely.
self.playing = True
root.after(self.polling_delay, self.check_status) # Start playing check.
def stop(self):
if self.playing:
self.mixer.music.stop()
self.playing = False
def check_status(self):
if self.playing:
print('playing')
root.after(self.polling_delay, self.check_status) # Repeat after delay.
root = Tk()
root.geometry("1000x200")
root.title("Sampler")
mixer.init()
play_control = PlayController(mixer, 'tone.wav', 1000)
Button(root, text="Play", command=play_control.play).pack()
Button(root, text="Stop", command=play_control.stop).pack()
mainloop()
关于python - 如何使用 Tkinter 按钮跳出无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49432915/
这个问题刚刚出现:如何打破 if 语句?我有一个很长的 if 语句,但有一种情况我可以尽早摆脱它。 在循环中我可以这样做: while (something ) { last if $some
我有一个 iframe,它显示带有可点击链接的 flash 横幅广告。无论如何强制链接在父窗口中打开,而不将 JS 放在打开或更改 flash 文件的页面上? 例如,我可以对 iFrame 做些什么来
JSHint 告诉我不要在 if 语句中使用标签(就 jshint 而言,标签似乎只用于循环)。 forminjection: if (options.addToForm !== false) {
我正在动态地将文本字段(最多 32 个)添加到我的页面中,我需要遍历所有这些文本字段并检查,如果它们全部为空,我将显示一条警告消息!我不想使用 document.getElementsByTagNam
我正在编写一个程序,其中我使用 if 语句来检查某些条件;如果为真,我会增加一个计数器。问题是,一旦语句为真,变量要么无限递增,要么随机递增。 如果条件满足但我一直在尝试使用一些子句来打破这个语句 我
有一个similar question关于 C++ 中的这个问题,但我在这里使用 JavaScript。我基本上和另一篇文章中的 OP 处于相同的情况。 var input = prompt(); w
我一直在研究 Issue 14在 PascalScript 脚本引擎上,使用 Goto 命令跳出 Case block 会产生编译器错误,即使这是完全有效(如果丑陋)的 Object Pascal 代
我正在使用 VBA 的 While...Wend 循环。 Dim count as Integer While True count=count+1 If count = 10 The
我在这个网站上看到过类似的问题,但我无法让它工作。我正在尝试通过 Javascript 检测输入框中的重复条目 - 但我希望在输入重复项时循环中断。我有那部分工作,但循环继续运行,它创建了一个用户无法
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度的了解。包括尝试的解决方案、为什么它们不起作用以及预期结果
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我有一个问题,我可能需要因为某些值(value)而跳出整个 promise 链,或者根据一个值(value)采取两条路径。 你怎么做最好? 这是我想跳出整个链条的第一个场景。我只想给他们留言。
因此,对于类作业,我必须接受用户输入并分配我的沙鼠对象每天可以使用的“食物”量。在这种情况下,我已经从用户那里获取了每天的最大食物量,如果用户尝试输入超过每日最大值的值,我需要向用户提供错误消息。 如
我正在尝试制作一个导航栏,它看起来像这样 https://imgur.com/a/wf7Pe 是有链接的那个,忽略白色的div。 问题是,如果调整页面大小,文本会超出 div,位于其下方。 像这样:
我正在尝试使用 C 退出 while 循环,但使用中断、返回或更改 while 条件不起作用。 基本上,我想知道为什么在最后一个 else if 中,当我声明 back = true 时,我的代码一直
我正在寻找关键字或干净的方式来不使用选择语句退出finally block 。考虑以下示例: private bool AtteptToDoSomething() { try {
我有一个 python 脚本,它将解析 xml 文件中的序列号并将它们写入文本文件。下面代码的问题是,它正在进行无限循环。如果我在记录到文件后的某个位置添加一条break语句,它只会写入一个序列号。如
我在类 LinkRepository 中有一个方法,我正在检查 vector 数组 Datalinks 中的重复条目,它是该类的一个成员。我遍历数组中的所有元素以检查新条目 Datalink* dat
是否可以在每个循环中跳出下划线……? _.each(obj, function(v,i){ if(i > 2){ break // <~ does not work } // so
我想优化依赖于 filter() 的函数。在某些情况下,我想在它们达到特定元素时打破它们。 (例如,我可能有一个包含不同元素的数组。或者,我只想实现一种 findFirst 功能。)在这种情况下,函数
我是一名优秀的程序员,十分优秀!