]>
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 except NotImplementedError:
33 self
.Bind(wx
.media
.EVT_MEDIA_LOADED
, self
.OnMediaLoaded
)
35 btn1
= wx
.Button(self
, -1, "Load File")
36 self
.Bind(wx
.EVT_BUTTON
, self
.OnLoadFile
, btn1
)
38 btn2
= wx
.Button(self
, -1, "Play")
39 self
.Bind(wx
.EVT_BUTTON
, self
.OnPlay
, btn2
)
42 btn3
= wx
.Button(self
, -1, "Pause")
43 self
.Bind(wx
.EVT_BUTTON
, self
.OnPause
, btn3
)
45 btn4
= wx
.Button(self
, -1, "Stop")
46 self
.Bind(wx
.EVT_BUTTON
, self
.OnStop
, btn4
)
48 slider
= wx
.Slider(self
, -1, 0, 0, 0)
50 slider
.SetMinSize((150, -1))
51 self
.Bind(wx
.EVT_SLIDER
, self
.OnSeek
, slider
)
53 self
.st_size
= StaticText(self
, -1, size
=(100,-1))
54 self
.st_len
= StaticText(self
, -1, size
=(100,-1))
55 self
.st_pos
= StaticText(self
, -1, size
=(100,-1))
59 sizer
= wx
.GridBagSizer(5,5)
60 sizer
.Add(self
.mc
, (1,1), span
=(5,1))#, flag=wx.EXPAND)
61 sizer
.Add(btn1
, (1,3))
62 sizer
.Add(btn2
, (2,3))
63 sizer
.Add(btn3
, (3,3))
64 sizer
.Add(btn4
, (4,3))
65 sizer
.Add(slider
, (6,1), flag
=wx
.EXPAND
)
66 sizer
.Add(self
.st_size
, (1, 5))
67 sizer
.Add(self
.st_len
, (2, 5))
68 sizer
.Add(self
.st_pos
, (3, 5))
71 #self.DoLoadFile(os.path.abspath("data/testmovie.mpg"))
72 wx
.CallAfter(self
.DoLoadFile
, os
.path
.abspath("data/testmovie.mpg"))
74 self
.timer
= wx
.Timer(self
)
75 self
.Bind(wx
.EVT_TIMER
, self
.OnTimer
)
80 def OnLoadFile(self
, evt
):
81 dlg
= wx
.FileDialog(self
, message
="Choose a media file",
82 defaultDir
=os
.getcwd(), defaultFile
="",
83 style
=wx
.OPEN | wx
.CHANGE_DIR
)
84 if dlg
.ShowModal() == wx
.ID_OK
:
90 def DoLoadFile(self
, path
):
91 self
.playBtn
.Disable()
93 if not self
.mc
.Load(path
):
94 wx
.MessageBox("Unable to load %s: Unsupported format?" % path
,
96 wx
.ICON_ERROR | wx
.OK
)
98 self
.mc
.SetBestFittingSize()
99 self
.GetSizer().Layout()
100 self
.slider
.SetRange(0, self
.mc
.Length())
102 def OnMediaLoaded(self
, evt
):
103 self
.playBtn
.Enable()
105 def OnPlay(self
, evt
):
106 if not self
.mc
.Play():
107 wx
.MessageBox("Unable to Play media : Unsupported format?",
109 wx
.ICON_ERROR | wx
.OK
)
111 self
.slider
.SetRange(0, self
.mc
.Length())
113 def OnPause(self
, evt
):
116 def OnStop(self
, evt
):
120 def OnSeek(self
, evt
):
121 offset
= self
.slider
.GetValue()
124 def OnTimer(self
, evt
):
125 offset
= self
.mc
.Tell()
126 self
.slider
.SetValue(offset
)
127 self
.st_size
.SetLabel('size: %s' % self
.mc
.GetBestSize())
128 self
.st_len
.SetLabel('length: %d seconds' % (self
.mc
.Length()/1000))
129 self
.st_pos
.SetLabel('position: %d' % offset
)
131 def ShutdownDemo(self
):
135 #----------------------------------------------------------------------
137 def runTest(frame
, nb
, log
):
139 win
= TestPanel(nb
, log
)
141 except NotImplementedError:
142 from Main
import MessagePanel
143 win
= MessagePanel(nb
, 'wx.MediaCtrl is not available on this platform.',
144 'Sorry', wx
.ICON_WARNING
)
148 #----------------------------------------------------------------------
152 overview
= """<html><body>
153 <h2><center>wx.MediaCtrl</center></h2>
155 wx.MediaCtrl is a class that allows a way to convieniently display
156 various types of media, such as videos, audio files, natively through
157 native codecs. Several different formats of audio and video files are
158 supported, but some formats may not be playable on all platforms or
159 may require specific codecs to be installed.
162 wx.MediaCtrl uses native backends to render media, for example on Windows
163 there is a ActiveMovie/DirectShow backend, and on Macintosh there is a
166 wx.MediaCtrl is not currently available on unix systems.
173 if __name__
== '__main__':
176 run
.main(['', os
.path
.basename(sys
.argv
[0])] + sys
.argv
[1:])