]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/demo/MediaCtrl.py
   6 #---------------------------------------------------------------------- 
   8 class StaticText(wx
.StaticText
): 
  10     A StaticText that only updates the label if it has changed, to 
  11     help reduce potential flicker since these controls would be 
  12     updated very frequently otherwise. 
  14     def SetLabel(self
, label
): 
  15         if label 
<> self
.GetLabel(): 
  16             wx
.StaticText
.SetLabel(self
, label
) 
  18 #---------------------------------------------------------------------- 
  20 class TestPanel(wx
.Panel
): 
  21     def __init__(self
, parent
, log
): 
  23         wx
.Panel
.__init
__(self
, parent
, -1, 
  24                           style
=wx
.TAB_TRAVERSAL|wx
.CLIP_CHILDREN
) 
  26         # Create some controls 
  28             self
.mc 
= wx
.media
.MediaCtrl(self
, style
=wx
.SIMPLE_BORDER
, 
  29                                          #szBackend=wx.media.MEDIABACKEND_DIRECTSHOW 
  30                                          #szBackend=wx.media.MEDIABACKEND_QUICKTIME 
  31                                          #szBackend=wx.media.MEDIABACKEND_WMP10 
  33         except NotImplementedError: 
  37         self
.Bind(wx
.media
.EVT_MEDIA_LOADED
, self
.OnMediaLoaded
) 
  39         btn1 
= wx
.Button(self
, -1, "Load File") 
  40         self
.Bind(wx
.EVT_BUTTON
, self
.OnLoadFile
, btn1
) 
  42         btn2 
= wx
.Button(self
, -1, "Play") 
  43         self
.Bind(wx
.EVT_BUTTON
, self
.OnPlay
, btn2
) 
  46         btn3 
= wx
.Button(self
, -1, "Pause") 
  47         self
.Bind(wx
.EVT_BUTTON
, self
.OnPause
, btn3
) 
  49         btn4 
= wx
.Button(self
, -1, "Stop") 
  50         self
.Bind(wx
.EVT_BUTTON
, self
.OnStop
, btn4
) 
  52         slider 
= wx
.Slider(self
, -1, 0, 0, 0) 
  54         slider
.SetMinSize((150, -1)) 
  55         self
.Bind(wx
.EVT_SLIDER
, self
.OnSeek
, slider
) 
  57         self
.st_size 
= StaticText(self
, -1, size
=(100,-1)) 
  58         self
.st_len  
= StaticText(self
, -1, size
=(100,-1)) 
  59         self
.st_pos  
= StaticText(self
, -1, size
=(100,-1)) 
  63         sizer 
= wx
.GridBagSizer(5,5) 
  64         sizer
.Add(self
.mc
, (1,1), span
=(5,1))#, flag=wx.EXPAND) 
  65         sizer
.Add(btn1
, (1,3)) 
  66         sizer
.Add(btn2
, (2,3)) 
  67         sizer
.Add(btn3
, (3,3)) 
  68         sizer
.Add(btn4
, (4,3)) 
  69         sizer
.Add(slider
, (6,1), flag
=wx
.EXPAND
) 
  70         sizer
.Add(self
.st_size
, (1, 5)) 
  71         sizer
.Add(self
.st_len
,  (2, 5)) 
  72         sizer
.Add(self
.st_pos
,  (3, 5)) 
  75         #self.DoLoadFile(os.path.abspath("data/testmovie.mpg")) 
  76         wx
.CallAfter(self
.DoLoadFile
, os
.path
.abspath("data/testmovie.mpg")) 
  78         self
.timer 
= wx
.Timer(self
) 
  79         self
.Bind(wx
.EVT_TIMER
, self
.OnTimer
) 
  84     def OnLoadFile(self
, evt
): 
  85         dlg 
= wx
.FileDialog(self
, message
="Choose a media file", 
  86                             defaultDir
=os
.getcwd(), defaultFile
="", 
  87                             style
=wx
.OPEN | wx
.CHANGE_DIR 
) 
  88         if dlg
.ShowModal() == wx
.ID_OK
: 
  94     def DoLoadFile(self
, path
): 
  95         self
.playBtn
.Disable() 
  97         if not self
.mc
.Load(path
): 
  98             wx
.MessageBox("Unable to load %s: Unsupported format?" % path
, 
 100                           wx
.ICON_ERROR | wx
.OK
) 
 102             self
.mc
.SetInitialSize() 
 103             self
.GetSizer().Layout() 
 104             self
.slider
.SetRange(0, self
.mc
.Length()) 
 106     def OnMediaLoaded(self
, evt
): 
 107         self
.playBtn
.Enable() 
 109     def OnPlay(self
, evt
): 
 110         if not self
.mc
.Play(): 
 111             wx
.MessageBox("Unable to Play media : Unsupported format?", 
 113                           wx
.ICON_ERROR | wx
.OK
) 
 115             self
.mc
.SetInitialSize() 
 116             self
.GetSizer().Layout() 
 117             self
.slider
.SetRange(0, self
.mc
.Length()) 
 119     def OnPause(self
, evt
): 
 122     def OnStop(self
, evt
): 
 126     def OnSeek(self
, evt
): 
 127         offset 
= self
.slider
.GetValue() 
 130     def OnTimer(self
, evt
): 
 131         offset 
= self
.mc
.Tell() 
 132         self
.slider
.SetValue(offset
) 
 133         self
.st_size
.SetLabel('size: %s' % self
.mc
.GetBestSize()) 
 134         self
.st_len
.SetLabel('length: %d seconds' % (self
.mc
.Length()/1000)) 
 135         self
.st_pos
.SetLabel('position: %d' % offset
) 
 137     def ShutdownDemo(self
): 
 141 #---------------------------------------------------------------------- 
 143 def runTest(frame
, nb
, log
): 
 145         win 
= TestPanel(nb
, log
) 
 147     except NotImplementedError: 
 148         from Main 
import MessagePanel
 
 149         win 
= MessagePanel(nb
, 'wx.MediaCtrl is not available on this platform.', 
 150                            'Sorry', wx
.ICON_WARNING
) 
 154 #---------------------------------------------------------------------- 
 158 overview 
= """<html><body> 
 159 <h2><center>wx.MediaCtrl</center></h2> 
 161 wx.MediaCtrl is a class that allows a way to convieniently display 
 162 various types of media, such as videos, audio files, natively through 
 163 native codecs.  Several different formats of audio and video files are 
 164 supported, but some formats may not be playable on all platforms or 
 165 may require specific codecs to be installed. 
 168 wx.MediaCtrl uses native backends to render media, for example on Windows 
 169 there is a ActiveMovie/DirectShow backend, and on Macintosh there is a  
 172 wx.MediaCtrl is not currently available on unix systems.  
 179 if __name__ 
== '__main__': 
 182     run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])