stu*_*ent 5 python keyboard qt4 pyqt4 mplayer
这是对此答案的后续问题:https://stackoverflow.com/a/11939294/406686:
考虑下面的代码,它将mplayer嵌入到QWidget.问题是它不会对任何mplayer键盘快捷键做出反应,例如右箭头用于向前搜索等等.
很明显,我可以手动重新实现每个快捷方式.但是有一种方法可以将所有键盘序列自动输送到mplayer,只要按下一个修改键,比如ALT或Win-Key?
例如:按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_())
Run Code Online (Sandbox Code Playgroud)
我不确定我是否正确解决了您的问题。您可以轻松地将keyPressEvent和keyReleaseEvent方法添加到您的Window类中:
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
Run Code Online (Sandbox Code Playgroud)
此示例仅适用于修饰符 + 另一个键。如果您还需要更复杂的快捷键,例如Alt+ Ctrl+ Shift+ →,您可能需要列表来保存当前按下的键,但基本思想应该很清楚。
在我的电脑上,python 按下的按键和从 mplayer 接收到的按键不同,但我使用了一种非常不常见的键盘布局(Neo-Layout),所以这可能是造成这种情况的原因。