我刚刚购买了 Compucessory 2 端口 USB 数字键盘(型号:34222)。
在 Linux 下,使用 Python 2 和 PySide,无论 NumLock 设置如何,它都能正常工作。(它会生成不同的值,但每次按键只会生成一个值。)
在 Mac OS X (Sierra) 下,当 NumLock 关闭时,一切正常。当它打开时,每次按键都会生成正确的值(例如 49),但随后是 16777227,这是 NumLock 打开时“5”键的值。
这是问题的简化版本:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
from __future__ import print_function
import sys
from PySide.QtCore import *
from PySide.QtGui import *
class QGV(QGraphicsView):
def __init__(self, parent=None):
super(QGV, self).__init__(parent)
self.scene = QGraphicsScene(0, 0, 200, 200, self)
self.setScene(self.scene)
def keyPressEvent(self, event):
deg = {55: 225, 56: 270, 57: 315, # 7 8 9
52: 180, 54: 0, # 4 (5) 6
49: 135, 50: 90, 51: 45, # 1 2 3
16777232: 225, 16777235: 270, 16777238: 315, # 7 8 9
16777234: 180, 16777236: 0, # 4 (5) 6
16777233: 135, 16777237: 90, 16777239: 45} # 1 2 3
if event.isAutoRepeat():
return
k = event.key()
if k == Qt.Key_Escape:
QApplication.closeAllWindows()
if k in deg:
print("Set: {0:3d} degrees ({1:8d})".format(deg[k], k))
elif k in (53, 16777227):
print("Reset: ({0:8d})".format(k))
else:
print("Ignored: ({0:8d})".format(k))
super(QGV, self).keyPressEvent(event)
def main():
import sys
app = QApplication(sys.argv)
qgv = QGV()
qgv.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()