Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pyqt4中按修改器键时,自动将所有键盘命令传送到嵌入式mplayer实例_Python_Keyboard_Qt4_Pyqt4_Mplayer - Fatal编程技术网

Python 在pyqt4中按修改器键时,自动将所有键盘命令传送到嵌入式mplayer实例

Python 在pyqt4中按修改器键时,自动将所有键盘命令传送到嵌入式mplayer实例,python,keyboard,qt4,pyqt4,mplayer,Python,Keyboard,Qt4,Pyqt4,Mplayer,这是这个答案的后续问题:: 考虑以下代码,它将mplayer嵌入到QWidget中。问题是它不会对任何mplayer键盘快捷键做出反应,例如右箭头表示向前搜索等等 很明显,我可以手动重新实现每个快捷方式。但是,有没有一种方法可以在按下修改键(比如ALT或Win键)的情况下将所有键盘序列自动传送到mplayer 例如:按ALT+→ = 寻求前进 import mpylayer from PyQt4 import QtGui, QtCore class Window(QtGui.QWidget):

这是这个答案的后续问题::

考虑以下代码,它将mplayer嵌入到
QWidget
中。问题是它不会对任何mplayer键盘快捷键做出反应,例如右箭头表示向前搜索等等

很明显,我可以手动重新实现每个快捷方式。但是,有没有一种方法可以在按下修改键(比如ALT或Win键)的情况下将所有键盘序列自动传送到mplayer

例如:按ALT+→ = 寻求前进

import mpylayer
from PyQt4 import QtGui, QtCore

class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.container = QtGui.QWidget(self)
        self.container.setStyleSheet('background: black')
        self.button = QtGui.QPushButton('Open', self)
        self.button.clicked.connect(self.handleButton)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.container)
        layout.addWidget(self.button)
        self.mplayer = mpylayer.MPlayerControl(
            'mplayer', ['-wid', str(self.container.winId())])

    def handleButton(self):
        path = QtGui.QFileDialog.getOpenFileName()
        if not path.isEmpty():
            self.mplayer.loadfile(unicode(path))

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.resize(640, 480)
    window.show()
    sys.exit(app.exec_())

我不确定,如果我没弄错你的问题。您可以轻松地将
按键事件
按键释放事件
方法添加到
窗口
类:

class Window(QtGui.QWidget):
    def __init__(self):
        # same code as above
        self.setFocus()
        self.__modifier_pressed = False

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Alt:
            self.__modifier_pressed = True
        elif self.__modifier_pressed:
            self.mplayer.run_command("key_down_event", event.nativeVirtualKey())

    def keyReleaseEvent(self, event):
        if event.key() == QtCore.Qt.Key_Alt:
            self.__modifier_pressed = False
此示例仅适用于修改器+另一个键。如果对于更复杂的快捷方式(如Alt+Ctrl+Shift)也需要此选项+→, 您可能需要列表来保存当前按下的键,但基本思想应该很清楚


在我的计算机上,python的按键和从mplayer收到的按键是不同的,但我使用了一种非常不常见的键盘布局(),因此这可能就是原因。

谢谢,但如果没有错误消息,它就无法工作。如果我在
self.\uu modifier\u pressed=True.
行之前打印某个内容,则当按下修改键时,该内容将被打印出来,但如果我在
self.mplayer.之前打印某个内容,则运行命令(“key\u down\u event”,key)
不会发生任何事情,因此似乎永远不会执行elif部分…一般来说,在按住“Alt”键时它应该工作-键,然后按另一个键。我刚刚意识到,箭头键有一个普遍的问题。作为一种解决方法,我在init方法中添加了self.setFocus(),然后激活了所有keyPressEvents。我刚刚发现,event.nativeVirtualKey()可能会将正确的键发送到mplayer,不幸的是,这对箭头键不起作用。很可能,它们需要手动转换为mplayer所需的密钥代码。谢谢,除了箭头键和空格(这很重要)之外,这是有效的。如果你有办法解决这个问题,那就太好了。尽管如此,我还是会给你奖励分数!