wxPythonで動画プレイヤーを作成してみる wx.MediaCtrl

2021年7月9日金曜日

Python wxPython

t f B! P L

今回の内容

今回はスライダーとMediaCtrlを組み合わせてまぁまぁ本格的な動画プレイヤーを作っていきたいと思います。

ソースコード

import wx
import wx.media as media
import math
class MyFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self,None,-1,"ウィンドウ",size=(700,600))
        panel = wx.Panel(self,-1)
        self.mediapanel = wx.Panel(panel,-1)
        self.mediactrl = media.MediaCtrl(self.mediapanel,style=wx.SIMPLE_BORDER,szBackend=wx.media.MEDIABACKEND_WMP10,size=(600,340))
        mediasizer = wx.BoxSizer()
        mediasizer.Add(self.mediactrl)
        self.mediapanel.SetSizer(mediasizer)
        self.slider = wx.Slider(panel, -1, 1000, 0, 1000,style=wx.SL_HORIZONTAL|wx.SL_AUTOTICKS|wx.SL_LABELS)
        self.mediactrl.Load("movie.mp4") #動画のパスを指定
        self.mediactrl.Play() #動画を再生
        buttonpanel = wx.Panel(panel,-1)
        #各ボタンの設置
        button_play = wx.Button(buttonpanel,-1,"再生")
        button_play.Bind(wx.EVT_BUTTON,self.PlayMedia)
        button_pause = wx.Button(buttonpanel,-1,"一時停止")
        button_pause.Bind(wx.EVT_BUTTON,self.PauseMedia)
        button_stop = wx.Button(buttonpanel,-1,"停止")
        button_stop.Bind(wx.EVT_BUTTON,self.StopMedia)
        #各ボタンのレイアウト
        sizer = wx.BoxSizer(wx.HORIZONTAL)
        sizer.Add(button_play)
        sizer.Add(button_pause)
        sizer.Add(button_stop)
        buttonpanel.SetSizer(sizer)
        #各ウィジェットのレイアウト
        mainsizer = wx.BoxSizer(wx.VERTICAL)
        mainsizer.Add(self.mediapanel,4,wx.EXPAND)
        mainsizer.Add(self.slider,1,wx.EXPAND)
        mainsizer.Add(buttonpanel,1,wx.EXPAND)
        panel.SetSizer(mainsizer)
        #スライダーのイベント
        self.slider.Bind(wx.EVT_SLIDER, self.onSeek)
        #リアルタイムでスライダーに反映させる
        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.onTimer)
        self.timer.Start(1000)
    def onSeek(self,event):
        # スライダーのイベント
        offset = self.slider.GetValue()
        self.mediactrl.Seek(math.ceil(offset*1000))
        self.mediactrl.Play()
    def onTimer(self,event):
        # リアルタイムでスライダーに反映
        offset = self.mediactrl.Tell()
        self.slider.SetValue(math.ceil(offset/1000))
    def PlayMedia(self,event):
        #メディアを再生
        self.mediactrl.Play()
        self.slider.SetRange(0, math.ceil(self.mediactrl.Length()/1000))
    def PauseMedia(self,event):
        #メディアを一時停止
        self.mediactrl.Pause()
    def StopMedia(self,event):
        #メディアを停止
        self.mediactrl.Stop()
        
app = wx.App(False)
MyFrame().Show(True)
app.MainLoop()


wxPythonで動画プレイヤーを作成してみる wx.MediaCtrl

解説

だいぶ長いコードになり、動作もスライダーの影響で遅くなりました。
まずこのコードでやっていることは、
1.MediaCtrlの設置
2.Sliderの設置
3.MediaCtrlへファイルを読み込ませる
4.各ボタンを設置
5.再生ボタンが押されたら
  MediaCtrlを再生させ、Sliderを動画の長さにあわあせる
6.一時停止ボタンが押されたら
  MediaCtrlをポーズさせる
7.停止ボタンが押されたら
  MEdiaCtrlを停止させrt
8.Timerイベントを利用してSliderに現在の再生位置を入れる

って感じです。

注意事項

環境によってだいぶ動作がことなります。
このコードはWindows環境で動作するもので、LinuxやMacでは動作しません。

さいごに

このコードには不備がおおいです。
そのようなものを発見された場合は、コメントで教えてください!



コメント気軽にどうぞ!!!!
記事がよかったらシェアなどもお願いします!!!!

wxPythonの今スグ使えるサンプル集18個!GUI開発をマスターしよう!

今回はwxPythonのサンプルを18個紹介したいと思います。
wxPythonはウィジェットが豊富で自由度が高いので、応用するといろいろなツールが作成できます。

このブログを検索

要望について

ブログのレイアウトやテーマについての提案をいただきました。現在qooqテーマを適応中です。 語尾を自動でつけるプログラムを作りたいという要望をいただきました。是非紹介したいですがどの言語でどのようなプログラムかなど、お問い合わせフォームで詳しく教えてください!

最近の出来事

最近の出来事
寿司打お勧め75位♪(練習モードだけど)

アンケート

Welcome!

「プログラミング独学ブログ」へようこそ。 Yakinyといいます。幅広い範囲で投稿していますので、ぜひ過去の記事も見てみてください!!コメントも大歓迎です!更新がとまってしまって申し訳ございません

お問い合わせ

名前

メール *

メッセージ *

QooQ