5 This module provides two helper classes, to ease the embedding of a
6 VLC component inside a pygtk application.
8 VLCWidget is a simple VLC widget.
10 DecoratedVLCWidget provides simple player controls.
19 from gettext import gettext as _
21 # Create a single vlc.Instance() to be share by (possible) multiple players.
22 instance=vlc.Instance()
24 class VLCWidget(gtk.DrawingArea):
27 Its player can be controlled through the 'player' attribute, which
28 is a vlc.MediaPlayer() instance.
30 def __init__(self, *p):
31 gtk.DrawingArea.__init__(self)
32 self.player=instance.media_player_new()
33 def handle_embed(*args):
34 if sys.platform == 'win32':
35 self.player.set_hwnd(self.window.handle)
37 self.player.set_xwindow(self.window.xid)
39 self.connect("map-event", handle_embed)
40 self.set_size_request(320, 200)
42 class DecoratedVLCWidget(gtk.VBox):
43 """Decorated VLC widget.
45 VLC widget decorated with a player control toolbar.
47 Its player can be controlled through the 'player' attribute, which
48 is a MediaControl instance.
50 def __init__(self, *p):
51 gtk.VBox.__init__(self)
52 self._vlc_widget=VLCWidget(*p)
53 self.player=self._vlc_widget.player
54 self.pack_start(self._vlc_widget, expand=True)
55 self._toolbar = self.get_player_control_toolbar()
56 self.pack_start(self._toolbar, expand=False)
58 def get_player_control_toolbar(self):
59 """Return a player control toolbar
62 tb.set_style(gtk.TOOLBAR_ICONS)
65 (_("Play"), _("Play"), gtk.STOCK_MEDIA_PLAY, lambda b: self.player.play()),
66 (_("Pause"), _("Pause"), gtk.STOCK_MEDIA_PAUSE, lambda b: self.player.pause()),
67 (_("Stop"), _("Stop"), gtk.STOCK_MEDIA_STOP, lambda b: self.player.stop()),
68 (_("Quit"), _("Quit"), gtk.STOCK_QUIT, lambda b: gtk.main_quit()),
71 for text, tooltip, stock, callback in tb_list:
72 b=gtk.ToolButton(stock)
73 b.connect("clicked", callback)
79 """Example simple video player.
82 self.vlc = DecoratedVLCWidget()
84 def main(self, fname):
85 self.vlc.player.set_media(instance.media_new(fname))
93 w.connect("destroy", gtk.main_quit)
96 class MultiVideoPlayer:
97 """Example multi-video player.
99 It plays multiple files side-by-side, with per-view and global controls.
101 def main(self, filenames):
111 for fname in filenames:
112 v=DecoratedVLCWidget()
113 v.player.set_media(instance.media_new(fname))
116 # Create global toolbar
118 tb.set_style(gtk.TOOLBAR_ICONS)
120 def execute(b, methodname):
121 """Execute the given method on all VLC widgets.
123 for v in videos.get_children():
124 getattr(v.player, methodname)()
127 for text, tooltip, stock, callback, arg in (
128 (_("Play"), _("Play"), gtk.STOCK_MEDIA_PLAY, execute, "play"),
129 (_("Pause"), _("Pause"), gtk.STOCK_MEDIA_PAUSE, execute, "pause"),
130 (_("Stop"), _("Stop"), gtk.STOCK_MEDIA_STOP, execute, "stop"),
131 (_("Quit"), _("Quit"), gtk.STOCK_QUIT, lambda b, d: gtk.main_quit(), None),
133 b=gtk.ToolButton(stock)
134 b.connect("clicked", callback, arg)
137 mainbox.pack_start(tb, expand=False)
140 window.connect("destroy", gtk.main_quit)
143 if __name__ == '__main__':
145 print "You must provide at least 1 movie filename"
147 if len(sys.argv[1:]) == 1:
148 # Only 1 file. Simple interface