ten jest kontynuacją pytanie do tej odpowiedzi: https://stackoverflow.com/a/11939294/406686:rur wszystkie polecenia klawiatury automatycznie osadzonym przykład mplayer, gdy zostanie naciśnięty klawisz modyfikujący w PyQt4
Rozważmy następujący kod, który osadza MPlayer w QWidget
. Problem polega na tym, że nie reaguje on na żadne skróty klawiszowe mplayera, takie jak strzałka w prawo, aby wyszukiwać dalej i tak dalej.
Jest oczywiste, że mogę ponownie wprowadzić każdy skrót ręcznie. Czy istnieje jednak sposób na automatyczne przekierowanie wszystkich sekwencji klawiszy do mplayera, o ile klawisz modyfikujący, np. ALT lub klawisz Win jest wciśnięty?
Na przykład: Naciśnij ALT + → = dążyć naprzód ...
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_())
Dzięki, ale nie działa bez komunikatów o błędach. Jeśli wydrukuję coś przed linią 'self .__ modifier_pressed = True' zostanie wydrukowane, gdy klawisz modyfikatora zostanie naciśnięty, ale jeśli wydrukuję coś przed' self.mplayer.run_command ("key_down_event", klawisz) 'nic się nie dzieje, więc wydaje się, że część elifa nigdy nie zostanie wykonana ... – student
Generalnie powinna działać, gdy przytrzymasz klawisz "Alt", a następnie naciskasz inny klawisz. Właśnie zdałem sobie sprawę, że istnieje ogólny problem z klawiszami strzałek. Jako obejście dodałem metodę self.setFocus() do metody init, a następnie wszystkie keyPressEvents zostaną aktywowane. –
Właśnie się dowiedziałem, że event.nativeVirtualKey() może wysłać prawy klawisz do mplayera, niestety to nie działa dla klawiszy strzałek. Prawdopodobnie muszą zostać przekonwertowane ręcznie na kod klucza wymagany przez mplayer. –