【问题标题】:How I can capture in Python the Ctrl key (only Ctrl, without another at the same time) when pressed?按下时如何在Python中捕获Ctrl键(只有Ctrl,同时没有另一个)?
【发布时间】:2015-09-24 18:47:06
【问题描述】:

我需要检测,在 python 控制台(文本模式)程序中,当 Ctrl 键被按下时,同时没有另一个键。我尝试使用来自 curses 库和标准输入的 getch,但它等待任何键,但不是 CtrlAlt。我在 stackoverflow 中找到了信息,但总是提到 Windows/事件环境,或者同时按下另一个键(例如 Ctrl + C),但这不是我的情况。我在一些论坛上发现这是不可能的,但我可以相信。

【问题讨论】:

  • 你有什么操作系统?
  • 如果你可以使用 qt 你可以使用this
  • 我有 Raspbian,处于控制台模式(文本),所以我想我不能使用它。我是对的?

标签: python


【解决方案1】:

这个答案是以 Linux 为中心的,看到您提到 Raspbian 控制台模式意味着 Debian GNU/Linux 控制台系统。

如果您真的在谈论控制台,这可能虽然非常 hacky。 Curses 具有读取大多数键的原始模式,但 Control 是修饰键,因此不会以这种方式显示。我能想到的方法是读取输入设备,就像 X 一样。使用lsinput 查找哪个设备是您的键盘。正如 input-events 演示的那样,您可以在那里看到事件,同时它们也在其他地方进行处理。缺点之一是您不知道输入是否实际发送给您(除非您跟踪虚拟控制台切换、作业状态等)并且您需要访问设备,因为该属性意味着它可能是敏感数据,例如输入密码以登录另一个虚拟控制台。

使用loadkeys 重新映射控制键本身发送的内容可能更简单,从而将其从修饰符更改为可检测键。它仍将保留其较低级别的协议属性(例如,在 USB HID 启动协议键盘中,它将有一个专用位,而不是使用通常只有 6 个插槽之一用于按键)。

无论哪种方式,这都不容易或可移植,并且在所有终端环境(如 ssh 会话)中都不起作用。

【讨论】:

  • 谢谢亚恩。我会试试这个。无论如何,我担心便携性的问题,所以我尝试改变我的功能。我认为在我的情况下可能会使用一种“标准”方法,但我发现它比预期的要复杂。谢谢大家的时间。
猜你喜欢
  • 2010-10-23
  • 1970-01-01
  • 2016-09-18
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多