python中gui表白中放音乐_用Python中的Pyglet和Tkinter播放音乐

您将两个UI库混合在一起-这在本质上并不坏,但存在一些问题。值得注意的是,它们都需要一个自己的主循环来处理它们的事件。TKinter使用它来与桌面和用户生成的事件通信,在本例中,pyglet使用它来播放您的音乐。

这些循环中的每一个都阻止了正常的“自上而下”程序流,就像我们在学习非GUI编程时习惯的那样,程序应该基本上从主循环进行回调。在本例中,在Tkinter回调的中间,您将pyglet主循环(调用pyglet.app.run)置于运动状态,并且控件永远不会返回Tkinter库。

有时不同库的循环可以在同一个进程上共存,没有冲突——但当然,您要么运行其中一个,要么运行另一个。如果是这样,则可以在不同的Python线程中运行每个库的主循环。

如果它们不能同时存在,则必须在不同的过程中处理每个库。

因此,让音乐播放器在另一个线程中启动的一种方法可能是:from threading import Thread

def real_playsound () :

sound = pyglet.media.load('music.mp3')

sound.play()

pyglet.app.run()

def playsound():

global player_thread

player_thread = Thread(target=real_playsound)

player_thread.start()

如果Tkinter和pyglet可以共存,那就足够让你的音乐开始了。

然而,为了能够控制它,您需要实现更多的事情。我的建议是对pyglet线程进行一次回调,pyglet每秒调用一次——这个回调检查一些全局变量的状态,并根据它们选择停止音乐、更改正在播放的文件等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解答这个问题。 首先,你需要导入Tkinterpyglet库来实现音乐播放功能。然后,你可以创建一个带有滑动条的GUI界面,滑动条可以用来控制音乐的播放进度。 下面是一个简单的示例代码,可以实现音乐播放快进功能,并显示已播放位置和播放时长: ```python import tkinter as tk import pyglet class MusicPlayer: def __init__(self, window): # 初始化窗口 self.window = window self.window.title("Music Player") self.window.geometry("400x150") # 创建滑动条 self.progress_bar = tk.Scale(self.window, from_=0, to=100, orient="horizontal", command=self.update_progress) self.progress_bar.pack(fill="x") # 创建标签,用于显示已播放位置和播放时长 self.time_label = tk.Label(self.window, text="00:00 / 00:00") self.time_label.pack() # 加载音乐文件 self.music = pyglet.media.load("path/to/music/file.mp3") # 创建音乐播放器 self.player = pyglet.media.Player() self.player.queue(self.music) self.player.on_eos = self.on_eos def on_eos(self): # 当音乐播放完毕时,停止播放 self.player.pause() def update_progress(self, value): # 更新滑动条的值,并设置音乐播放进度 self.player.seek(self.music.duration * float(value) / 100) self.update_time_label() def update_time_label(self): # 更新时间标签的值,显示已播放位置和播放时长 current_time = pyglet.clock.get_formatted_time(self.player.time, format="m:s") total_time = pyglet.clock.get_formatted_time(self.music.duration, format="m:s") self.time_label.config(text=f"{current_time} / {total_time}") def play_music(self): # 播放音乐 self.player.play() # 创建窗口并运行音乐播放器 window = tk.Tk() music_player = MusicPlayer(window) music_player.play_music() window.mainloop() ``` 在这个代码,我们使用了Tkinter的Scale部件来创建滑动条,并使用pyglet库来加载和播放音乐。我们也创建了一个标签来显示已播放位置和播放时长,并在滑动滑动条时更新播放进度和时间标签的值。最后,我们创建了一个窗口并运行音乐播放器。 希望这个示例代码能够对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值