python - PySide 应用程序中嵌入的 MVP 播放器在 Windows 上没有收到鼠标点击
问题描述
我正在构建一个具有视频播放功能的基于 PySide/Qt 的应用程序。我找到了mpv 播放器和有用的python-mpv
库,可以将它放入我的基于 Python 的应用程序中。一切都很好。我遇到的问题是尝试在Windows机器上使用播放器(在 OS X 上没有问题):播放器渲染,视频开始播放,声音正常,但我无法点击屏幕控制。控件是可见的,但单击它们不会执行任何操作。就好像小部件没有收到鼠标点击,而只是在 Windows 上?
我在试图调试这个的互联网上没有找到太多其他东西。播放器不会抛出任何错误或警告,因此很难知道从哪里开始。我通常也不是 Windows 的老兄。这个人似乎有同样的问题,但我不确定他们是否解决了这个问题。
有没有其他人在让 mpv 播放器在基于 Qt 的应用程序中工作时遇到麻烦或成功?感谢任何见解!我在下面玩过的相同代码:
#!/usr/bin/env python3
import os
# In order to load mpv-1.dll
os.environ["PATH"] = os.path.dirname(__file__) + os.pathsep + os.environ["PATH"]
import mpv
import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import *
class Test(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.container = QWidget(self)
self.setCentralWidget(self.container)
self.container.setAttribute(Qt.WA_DontCreateNativeAncestors)
self.container.setAttribute(Qt.WA_NativeWindow)
player = mpv.MPV(wid=str(int(self.container.winId())),
input_default_bindings=True,
input_vo_keyboard=True)
player.play('./sample-mp4-file.mp4')
if __name__ == '__main__':
# This is necessary since PyQT stomps over the locale settings needed by libmpv.
# This needs to happen after importing PyQT before creating the first mpv.MPV instance.
import locale
locale.setlocale(locale.LC_NUMERIC, 'C')
app = QApplication(sys.argv)
win = Test()
win.setFixedWidth(1200)
win.setFixedHeight(800)
win.show()
sys.exit(app.exec_())
解决方案
我遇到了这个问题,这是我的解决方案。您可以从 mpv 获取“鼠标按钮”事件并调用函数。
@player.on_key_press('MOUSE_BTN0')
def mouse_pressed():
print('mouse button pressed')
推荐阅读
- selenium - 我们如何在桌面 Safari 浏览器中处理 Windows 身份验证
- java - 如何在 bean 验证期间确定哪个参数导致 HttpMessageNotReadableException
- r - 如何同时播放两个同名的df
- javascript - 通过创建隐藏输入在 React 中复制文本
- laravel - 使用 Laravel 在本地机器上使用 Envoy
- reactjs - Recharts - 如何强制图表从 x=0 开始?
- python - Selenium“选择”类返回“不支持的定位器策略”错误
- nativescript - 我可以使用哪个 NativeScript 变体在 Windows 上为 iOS 和 Android 开发?
- node.js - 运行 nodejs 文件时出现警告消息
- python - 在 python 中使用 HTML 标签时如何避免 KeyError: 'border-collapse' 错误?