Đây là một theo dõi câu hỏi để câu trả lời này: https://stackoverflow.com/a/11939294/406686:Pipe tất cả các lệnh bàn phím tự động đến một instance mplayer nhúng khi một phím modifier được nhấn trong pyqt4
Xét đoạn mã sau, mà nhúng mplayer trong một QWidget
. Vấn đề là nó không phản ứng với bất kỳ phím tắt mplayer như mũi tên bên phải để tìm kiếm tiếp và như vậy.
Rõ ràng là tôi có thể thực hiện lại mọi lối tắt theo cách thủ công. Tuy nhiên có cách nào để tự động sắp xếp tất cả các chuỗi bàn phím đến trình chơi nhạc miễn là phím bổ trợ, nói ALT hoặc phím Win-Key được nhấn?
Ví dụ: Nhấn ALT +→ = tìm kiếm về phía trước ...
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_())
Cảm ơn, nhưng nó không hoạt động nếu không có thông báo lỗi. Nếu tôi in một cái gì đó trước dòng 'self .__ modifier_pressed = True' nó được in ra, khi phím bổ trợ được nhấn, nhưng nếu tôi in một cái gì đó trước' self.mplayer.run_command ("key_down_event", key) 'không có gì xảy ra, vì vậy có vẻ như phần elif không bao giờ được thực hiện ... – student
Nói chung nó sẽ hoạt động khi giữ phím "Alt" -Key và sau đó nhấn một phím khác. Tôi vừa nhận ra rằng có một vấn đề chung với các phím mũi tên. Để giải quyết vấn đề này, tôi đã thêm self.setFocus() vào phương thức init, sau đó tất cả các keyPressEvents được kích hoạt. –
Tôi chỉ phát hiện ra rằng event.nativeVirtualKey() có thể gửi khóa bên phải đến mplayer, không may là điều này không hoạt động đối với các phím mũi tên. Có lẽ, họ cần phải chuyển đổi thủ công thành mã khóa được yêu cầu bởi mplayer. –