今回の内容
今回はスライダーと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()
解説
だいぶ長いコードになり、動作もスライダーの影響で遅くなりました。まずこのコードでやっていることは、
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はウィジェットが豊富で自由度が高いので、応用するといろいろなツールが作成できます。
0 件のコメント:
コメントを投稿