PythonでMP3再生(プログレスバーかスライダーか)
前回まで、MP3再生の「再生位置」を示すのには、プログレスバーを使っていたのですが、「スライダー」のほうが妥当かも?
Youtubeの動画などでの再生位置表示も、スライドすると位置を変えられる。あの部品は「スライダー」ですよね。
ただ、ちょっと気になることが。「再生」中の表示更新とユーザーによる「スライド」と競合したらどちらが優先されるのでしょうか? Copilot先生に聞いてみました。
・・ということであれば、変なことにはならず、スライダーでいけそう。
今回は、プログレスバーをスライダーに差し替えてみました。
まず、アプリのinit部分で
# プログレスバーWidget⇒スライダーWidget
# self.progressbar = ctk.CTkProgressBar(self, width=200, height=8)
# self.progressbar.pack(padx=50, pady=10)
self.slider_pos = ctk.CTkSlider(
self,
width=200,
height=8,
from_=0,
to=1.0,
command=self.slider_pos_event,
)
self.slider_pos.pack(padx=50, pady=10)
スライダーをスライドさせた時のイベント処理のメソッドを新規追加
def slider_pos_event(self, value):
self.player.pos = self.player.duration * value
あと、TTimerで一定時間おきに表示更新するときの対象をプログレスバーからスライダーに変更。
def task_updatedisp(self):
duration = self.player.duration
self.label_duration.configure(text=f"長さ:{duration:.1f}")
curr_pos = self.player.pos
self.label_currpos.configure(text=f"位置:{curr_pos:.1f}")
# self.progressbar.set(curr_pos / duration)
self.slider_pos.set(curr_pos / duration)
これでいけるかな?
期待通りの動作になりました。