]>
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:])