Python 用VLC和PyGTK在Windows上单击鼠标右键

Python 用VLC和PyGTK在Windows上单击鼠标右键,python,windows,pygtk,vlc,Python,Windows,Pygtk,Vlc,我正在将一个视频应用程序从Linux移植到Windows,并使用VLC作为媒体后端。我遇到了一个小问题,我还没有找到解决方案:当我在视频图像上右键单击时,应用程序没有反应,而电影正在播放。因为VLC,GTK没有收到右键单击。这似乎是一个vout驱动程序问题,因为我使用MPlayer进行了测试,右键单击可以正常工作,直到我使用direct3d或gl作为视频驱动程序。这里的解决方案是什么?我在Windows 7上使用带有VLC Python绑定的VLC。我遇到了类似的问题。 您只需在libvlc\u

我正在将一个视频应用程序从Linux移植到Windows,并使用VLC作为媒体后端。我遇到了一个小问题,我还没有找到解决方案:当我在视频图像上右键单击时,应用程序没有反应,而电影正在播放。因为VLC,GTK没有收到右键单击。这似乎是一个vout驱动程序问题,因为我使用MPlayer进行了测试,右键单击可以正常工作,直到我使用direct3d或gl作为视频驱动程序。这里的解决方案是什么?我在Windows 7上使用带有VLC Python绑定的VLC。

我遇到了类似的问题。 您只需在libvlc\u video\u set\u key\u inputlibvlc\u video\u set\u mouse\u input功能中传递False

工作代码示例:

instance = vlc.Instance()

class VLCWidget(gtk.DrawingArea):
    def __init__(self, *p):
        gtk.DrawingArea.__init__(self)
        self.player = instance.media_player_new()
        def handle_embed(*args):
            self.player.set_hwnd(self.window.handle)
            return True
        self.connect("map", handle_embed)
        self.set_size_request(320, 200)

class Player(gtk.Window):
    def __init__(self):
        gtk.Window.__init__(self)

        vbox = gtk.VBox()
        self._vlc_widget = VLCWidget()
        self.player = self._vlc_widget.player
        self.player.video_set_mouse_input(False)
        self.player.video_set_key_input(False)
        vbox.pack_start(self._vlc_widget, expand=True)
        self._toolbar = self.get_player_control_toolbar()
        self.pack_start(self._toolbar, expand=False)
        self.add(vbox)

        self._vlc_widget.set_events(
            gtk.gdk.BUTTON_PRESS_MASK
        )
        self._vlc_widget.connect("button-press-event", self.on_vlc_button_press)

    def on_vlc_button_press(self, widget, event):
        print "pressed"

    def get_player_control_toolbar(self):
        tb = gtk.Toolbar()
        tb.set_style(gtk.TOOLBAR_ICONS)
        for tooltip, stock, callback in (
            (_("Play"), gtk.STOCK_MEDIA_PLAY, lambda b: self.player.play()),
            (_("Pause"), gtk.STOCK_MEDIA_PAUSE, lambda b: self.player.pause()),
            (_("Stop"), gtk.STOCK_MEDIA_STOP, lambda b: self.player.stop()),
            ):
            b=gtk.ToolButton(stock)
            b.set_tooltip_text(tooltip)
            b.connect("clicked", callback)
            tb.insert(b, -1)
        tb.show_all()
        return tb

    def main(self, fname):
        self.show_all()
        self.player.set_media(instance.media_new(fname))
        self.connect("destroy", gtk.main_quit)
        gtk.main()

if __name__ == '__main__':
    p=Player()
    p.main("path_to_file")

我应该提到,我在一些Linux系统上遇到了类似的问题,使用MPlayer。应用程序似乎没有收到右键单击事件。不管怎么说,现在的问题是我如何在Windows中解决这个问题……pygtk.org上没有正式的公告,但现在已经发布了。它包括一系列针对Windows特定bug的修复程序。如果您还没有使用它,那就值得一试。我正在使用这个版本的PyGTK Alreadyth。这可能很愚蠢,但它是否可能源于与GTK集成的差异,因此VLC后端需要连接一个GTK事件侦听器,以激活适当的菜单功能(或您希望的功能)对于右键单击事件?我应该检查
vlc.py
,因为它有很好的文档记录。。。不使用gtk,但
self.player.video\u set\u mouse\u input(False)
self.player.video\u set\u key\u input(False)
几乎就是答案中提到的提示。救生员。。