我正在使用 python 和 tkinter 编写一个音乐数据库管理器。它几乎全部完成,但我坚持播放列表中的歌曲。原生 macOS 播放器 NSSound 有一个内置回调到一个委托,它发出轨道结束的信号,所以我想用它来触发一个虚拟事件回到主应用程序以发送下一首歌曲播放。但我不知道如何使回调工作,并希望得到一些帮助(这只是一个有点失控的爱好项目)。
此框架代码显示了应用程序的相关结构并按预期播放选定的文件,但我多次尝试制定委托都没有奏效。据我了解,播放器指定 Delegate 类作为其委托,然后这个类应该有一个回调方法“声音”以在歌曲结束时接收消息。我试图从 Apple Developer协议中找出它,并且还进行了广泛的搜索,只找到了一个示例。
我如何才能获得“成功!” 请留言?
from AppKit import NSSound
import tkinter as tk
from tkinter import filedialog
class Delegate (NSSound):
def init(self):
self = super(Delegate, self).init()
return self
#def sound (...) ??? #this should fire when the song finishes?
# print('Success!')
class App(tk.Tk): #representing the rest of the music database app
def __init__(self):
super().__init__()
file = filedialog.askopenfilename()
song = NSSound.alloc()
song.initWithContentsOfFile_byReference_(file, True)
delegate = Delegate.alloc().init()
song.setDelegate_(delegate)
song.play()
if __name__ == "__main__":
app = App()
app.mainloop()