如何使用Python 3在tkinter窗口中插入视频播放器?

时间:2017-08-21 16:55:19

标签: python python-3.x tkinter gstreamer

我想用python构建一个视频播放器,但我的应用程序将有更多的按钮,而不仅仅是播放/暂停,所以我需要在窗口中插入视频。

我现在有这个代码:

import tkinter
import os
import gi
gi.require_version('Gst', '1.0')
from gi.repository import GObject, Gst


def set_frame_handle(bus, message, frame_id):
    if not message.get_structure() is None:
        if message.get_structure().get_name() == 'prepare-window-handle':
            display_frame = message.src
            display_frame.set_property('force-aspect-ratio', True)
            display_frame.set_window_handle(frame_id)

root = tkinter.Tk()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry("%dx%d+0+0" % (w, h))

Gst.init(None)
GObject.threads_init()

video = tkinter.Frame(root, bg='#000000')
video.grid(row=0, column=0, sticky="nsew")

frame_id = video.winfo_id()

player = Gst.ElementFactory.make('playbin', None)
player.set_property('video-sink', None)
player.set_property('uri', 'file://%s' % (os.path.abspath('out.mpeg')))
player.set_state(Gst.State.PLAYING)

bus = player.get_bus()
bus.add_signal_watch()
bus.enable_sync_message_emission()
bus.connect('sync-message::element', set_frame_handle, frame_id)

root.mainloop()

但是这只创建了2个窗口,其中一个是OpenGL渲染器......我需要在同一窗口内的视频播放器......

1 个答案:

答案 0 :(得分:-1)

我建议您只创建另一个帧而不是视频播放器。在这个额外的框架中,你可以打包视频播放器,而不是别的。然后你可以根据需要创建尽可能多的窗口,只需参考这个额外的框架。这样可以更轻松地安排您想要添加的所有其他按钮和内容。