見出し画像

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)

これでいけるかな?

期待通りの動作になりました。

いいなと思ったら応援しよう!