【问题标题】:Wrong video size when using python-vlc with Tkinter on MacOS在 MacOS 上使用带有 Tkinter 的 python-vlc 时视频大小错误
【发布时间】:2023-02-17 20:13:20
【问题描述】:

我正在开发一个多平台应用程序,它通过 python-vlc 操作 VLC 并使其在 Tkinter 窗口中绘制。 我正在使用以下简化代码(灵感来自tkvlc.py example from python-vlc):

import os
import platform
import sys
import tkinter
from ctypes import c_void_p, cdll
from threading import Thread

import vlc

system = platform.system()

if system == "Darwin":
    # find the accurate Tk lib for Mac
    libtk = "libtk%s.dylib" % (tkinter.TkVersion,)
    if "TK_LIBRARY_PATH" in os.environ:
        libtk = os.path.join(os.environ["TK_LIBRARY_PATH"], libtk)
    else:
        prefix = getattr(sys, "base_prefix", sys.prefix)
        libtk = os.path.join(prefix, "lib", libtk)
    dylib = cdll.LoadLibrary(libtk)
    _GetNSView = dylib.TkMacOSXGetRootControl
    _GetNSView.restype = c_void_p
    _GetNSView.argtypes = (c_void_p,)
    del dylib


class Window(tkinter.Tk):
    def register(self, player):
        id = self.winfo_id()
        print(id)

        if system == "Darwin":
            player.set_nsobject(_GetNSView(id))
        elif system == "Linux":
            player.set_xwindow(id)
        elif system == "Windows":
            player.set_hwnd(id)


def play(instance, player, path):
    media = instance.media_new_path(path)
    player.set_media(media)
    player.play()


if __name__ == "__main__":
    instance = vlc.Instance()
    player = instance.media_player_new()
    window = Window()
    window.register(player)
    thread = Thread(target=play, args=(instance, player, sys.argv[1]))
    thread.start()
    window.mainloop()

在 MacOS 上,视频的大小不适应窗口的大小。 如果视频对于窗口而言太大,则会被裁剪,如果太小,则会位于左下角并被黑色包围。 只有在调整窗口大小时,视频的大小才会更新。 Here 是问题的视频捕获。 这不会发生在 Linux 或 Windows 上。

如果对 OnResize 方法的调用在第 471 行被阻止(该方法调整窗口大小以具有视频的大小比例),则 tkvlc.py example from python-vlc 也会出现同样的问题。

我应该怎么做才能强制 VLC 调整视频大小以自动适应窗口,就像在其他操作系统上默认做的那样?

【问题讨论】:

    标签: python-3.x macos tkinter vlc python-vlc


    【解决方案1】:

    我现在创建的项目也有同样的问题。

    【讨论】:

      猜你喜欢
      • 2020-03-19
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2014-01-04
      • 2020-02-11
      • 1970-01-01
      • 2017-05-12
      • 2014-04-03
      相关资源
      最近更新 更多