今回の内容
今回はスライダーと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 件のコメント:
コメントを投稿