Pyside神奇的tab无法捕获
- tab键第一次正常建立节点, 并进入编辑模式, 然后报一个输入法错误, 然后不会再响应任何tab了, 无法捕获他.
- bug详细描述
- enter也会引起imk错误, 然后, tab也不能用了
- 空格也会引起imk错误, 然后, tab也不能用了
- 错误: error messaging the mach port for IMKCFRunLoopWakeUpReliable
- 换成默认输入法, 报错换成了: Python[83634:32490113] TSM AdjustCapsLockLEDForKeyTransitionHandling - _ISSetPhysicalKeyboardCapsLockLED Inhibit
- 总结: 任何键盘输入都会导致一个报错, 此报错之后, 所有的tab按键就没有任何响应了, keyPressEvent不会被触发
- 如果在编辑模式打开输入法, 退出编辑模式就关闭输入法, 是否是更简洁明了的方案?
解决方案一:
全局事件:
class GlobalEventFilter(QObject):
def eventFilter(self, obj, event):
if event.type() == QEvent.Type.KeyPress:
print(f"全局事件捕获: {event.key()} 对象: {obj}")
return my_keypress_handler(obj, event)
return super().eventFilter(obj, event)
global_filter = GlobalEventFilter()
app.installEventFilter(global_filter)
解决方案二:
搞focus
dummy = QGraphicsRectItem()
dummy.setFlag(QGraphicsItem.GraphicsItemFlag.ItemIsFocusable, True)
item.scene().addItem(dummy)
dummy.setFocus()
item.scene().removeItem(dummy)
尝试了, 没用
# QApplication.inputMethod().hide()
# QTimer.singleShot(0, node.setFocus)
# QApplication.processEvents()
# print(f"当前输入法状态: {QApplication.inputMethod().isVisible()}")
# self.setFocusPolicy(Qt.FocusPolicy.StrongFocus)
# view.setTabKeyNavigation(False) # 禁用Tab焦点切换
# ✅ 对整个窗口禁用Tab导航
# window.setTabOrder(None, None) # 清除Tab顺序
# view.setAttribute(Qt.WA_InputMethodEnabled, False)
view.setAttribute(Qt.WidgetAttribute.WA_InputMethodEnabled, False)