如何使用 Python 暂时禁用键盘输入

     2023-02-23     66

关键词:

【中文标题】如何使用 Python 暂时禁用键盘输入【英文标题】:How to temporarily disable keyboard input using Python 【发布时间】:2015-03-26 22:19:37 【问题描述】:

我正在使用 Python 为 Windows 编写一个简单的程序,该程序利用了time 模块。具体来说,我使用time.sleep(x) 来暂停程序一小会儿,一般是0.5-2 秒。这基本上就是我正在做的事情:

import time
time.sleep(2)

while True:
    x = input(prompt)
    if x == 'spam':
        break

问题在于,如果用户在time.sleep 暂停时按下回车,那么这些回车将计入while 循环中的输入。这导致prompt 被打印多次,令人沮丧。

我想知道是否有办法在time.sleep 进行时暂时禁用键盘输入,然后再启用它。像这样的:

import time
disable_keyboard_input()
time.sleep(2)
enable_keyboard_input()

while True:
    etc.

有谁知道用 Python 来做这件事的方法吗?提前谢谢!

【问题讨论】:

***.com/questions/2520893/… 几乎是重复的 @Maltysen 这种方法对我不起作用:( while msvcrt.kbhit(): msvcrt.getwch() 应该可以在睡眠后清除键盘缓冲区。需要注意的是,这仅在 stdin 是 Windows 控制台时有效,而不是在将 sys.stdin 替换为管道或类似文件的对象的开发环境中。 @eryksun 非常感谢,成功了!我没有尝试通过控制台运行它,因为我不知道它改变了sys.stdin 的工作方式。现在完美运行,非常感谢! :D 也是disable or lock mouse and keyboard in Python?的副本 【参考方案1】:

我发现这非常有效:

import time
class keyboardDisable():

    def start(self):
        self.on = True

    def stop(self):
        self.on = False

    def __call__(self): 
        while self.on:
            msvcrt.getwch()


    def __init__(self):
        self.on = False
        import msvcrt

disable = keyboardDisable()
disable.start()
time.sleep(10)
disable.stop()

它阻止用户输入任何内容;当您按下键盘上的某个键时,什么也没有发生。

【讨论】:

我将此代码集成到我的一个程序中,它非常有用。我的问题是,它到底是如何工作的? @pythonier500 首先,抱歉回复晚了。代码通过不断运行 msvcrt.getwch() 来工作,它返回在字符打印到屏幕上之前按下的键。通常,这将用于在以某种方式修改后打印字符的代码中,但在这种情况下,返回的值被忽略。如果您改为打印它,您将能够正常输入。 TLRD:它在显示之前拦截密钥 上面的代码通常会禁用键盘输入,还是仅在 shell 或 cmd 中禁用?此外,如果我理解得很好,我们想要得到的结果是禁用键盘上的任何输入 10 秒。 它只能在 python 的 shell/cmd 中工作,并且只能阻止在那里显示的字符。如果你想停止所有键盘输入,那就更难了。它只是让python忽略按键,从而解决了OP的问题 好的,谢谢@mono,如果特定条件为真,我试图抑制不停止键盘输入,但很挣扎。【参考方案2】:

试试这个。

stdout = sys.stdout
sys.stdout = sys.stderr
time.sleep(2)

sys.stdout = stdout

while True:
    pass

没试过这个。但我希望在 sleep 结束之前输入的所有内容都会发送到 stderr ......不确定,但也许 Python 可以访问 linux 的 std/null ?

【讨论】:

【参考方案3】:

如果您使用它来制作真正的软件并且只想在输出屏幕中禁用键盘输入,那么其他 2 个答案是完美的。但是,如果是个人使用或者你想禁用整个系统的键盘,你可以使用这个代码:

import keyboard
import time
a = int(input("Enter the time (in seconds) for which you want to disable keyboard: "))
for i in range(150):
    keyboard.block_key(i)
time.sleep(a)

在执行这段代码之前不要忘记在终端中运行pip install keyboard,否则会报错。

【讨论】:

暂时禁用单个 Python 单元测试

...2011-01-0504:59:59【问题描述】:在Python中使用unittest模块时如何暂时禁用单个单元测试?【问题讨论】:【参考方案1】:您可以使用装饰器来禁用可以包装函数的测试,并阻止googletest或Python单元测试运行测试用例。defdisabled(f):def_d 查看详情

以编程方式禁用鼠标和键盘

...述】:我想在Mac上以编程方式暂时禁用鼠标和键盘输入(使用ObjectiveC/C/Unix),然后重新启用它们。【问题讨论】:可能重复:***.com/questions/4518559/…这里有另一个解决方案:***.com/questions/57856 查看详情

如何隐藏/禁用软键盘 android 上的完成按钮?

】如何隐藏/禁用软键盘android上的完成按钮?【英文标题】:Howcanihide/disabledonebuttononsoftkeyboardandroid?【发布时间】:2019-06-2422:15:39【问题描述】:我正在使用AmazonS3api。问题:使用TextWatcher。一旦用户在编辑文本中输入超过3个字... 查看详情

如何暂时禁用滚动?

】如何暂时禁用滚动?【英文标题】:Howtodisablescrollingtemporarily?【发布时间】:2011-06-1318:58:55【问题描述】:我正在使用scrollTojQuery插件,想知道是否可以通过Javascript暂时禁用窗口元素的滚动?我想禁用滚动的原因是,当您在scr... 查看详情

如何使用 JavaScript 暂时禁用文本选择?

】如何使用JavaScript暂时禁用文本选择?【英文标题】:HowcanIdisableTextSelectiontemporarilyusingJavaScript?【发布时间】:2010-10-2720:31:11【问题描述】:这是一个有点具体的问题,所以我会直奔主题。我正在为Web应用程序的一部分开发一... 查看详情

如何在颤动中禁用 texformfield 输入?

】如何在颤动中禁用texformfield输入?【英文标题】:HowcanIdisabletexformfieldinputinflutter?【发布时间】:2019-04-0905:54:47【问题描述】:在我用Flutter编写的应用程序中,我需要一个图标按钮来启用/禁用对其的输入。我声明了要启用/禁... 查看详情

在录制屏幕捕获视频时暂时禁用在输入字段中显示自动填充值

...时间】:2020-02-1600:32:25【问题描述】:我正在屏幕录制“如何录制视频”,并希望在录制时暂时禁用输入字段中显示的自动填充值。当我在录制过程中单击输入字段时,它们会不断弹出,并且会破 查看详情

使用 UITextField + UIPickerview 时禁用键盘输入

】使用UITextField+UIPickerview时禁用键盘输入【英文标题】:DisablingkeyboardinputwhenusingaUITextField+UIPickerview【发布时间】:2017-04-2820:12:24【问题描述】:这个项目同样点击textfieldpickerview打开,但是上面显示的数据可以在section中输入。... 查看详情

在linux上禁用python中的键盘

】在linux上禁用python中的键盘【英文标题】:Disablethekeyboardinpythononlinux【发布时间】:2021-10-2901:00:57【问题描述】:我的手有一些健康问题,为此我去看了医生,他说我需要少打字。为了帮助解决这个问题,我在python中创建了一... 查看详情

如何暂时禁用 git http 代理

】如何暂时禁用githttp代理【英文标题】:Howtotemporarilydisablegithttpproxy【发布时间】:2013-10-3116:18:33【问题描述】:我在公司防火墙后面使用git,并且通过使用http.proxy--global配置成功克隆了外部项目。当我想在内网上通过http克隆... 查看详情

如何暂时锁定您的键盘

...盘。您也可以使用该工具阻止有人在您离开时使用键盘。如何使用:KeyboardLocker是一个免费的便携式工具,由HowToGeek的人员从一个小型AutoHotkey脚本编译而成。您可以直接从 此处下载 并将文件夹解压缩到您希望将其保存在... 查看详情

如何禁用手机自带的输入法软键盘

今天在写代码的时候,突然遇到了这么一个需求,不许用手机自带的键盘,要用设计好的键盘统一起来,我一向,这丫的脑子有问题吧。但是也不是没有道理的。可以统一起来,给用户一种统一协调性,然后查找了许多代码,找... 查看详情

在输入文本字段中禁用键盘

...过readonly="readonly"作为日期元素吗?您是否尝试过使用readonly="readonly& 查看详情

如何使用 python 宏监视 Libreoffice 文档中的键盘输入?

】如何使用python宏监视Libreoffice文档中的键盘输入?【英文标题】:HowtomonitorkeyboardinputinaLibreofficedocumentusingapythonmacro?【发布时间】:2020-11-2119:46:09【问题描述】:请注意,这是一个自我回答的问题,仅供参考。尽管进行了坚定... 查看详情

如何禁用 EditText 中的 SwiftKey(第三方键盘)行为?

】如何禁用EditText中的SwiftKey(第三方键盘)行为?【英文标题】:HowtodisabletheSwiftKey(third-partykeyboard)behaviorinEditText?【发布时间】:2018-01-2910:33:24【问题描述】:我在我的Android应用程序中使用标准的EditText控件。此EditText的输入只... 查看详情

禁用横向软键盘输入的全屏编辑视图?

...inlandscape?【发布时间】:2011-05-1905:11:34【问题描述】:在使用软键盘的Android设备上,我想防止在横向模式下出现全屏键盘编辑视图(如下所示)(即我只想看到软键盘本身和我在它后面的视图)。我认为这可以使用InputMethodServic... 查看详情

JQuery Mobile:单击文本字段时如何禁用默认键盘?

】JQueryMobile:单击文本字段时如何禁用默认键盘?【英文标题】:JQueryMobile:howtodisabledefaultkeyboardwhenclickingintextfield?【发布时间】:2012-10-0513:22:41【问题描述】:我目前正在使用输入文本字段,当单击它们时会生成一个选择器(... 查看详情

Swift 4 - 如何使用按钮启用/禁用键盘

】Swift4-如何使用按钮启用/禁用键盘【英文标题】:Swift4-Howtoenable/disablekeyboardbyusingbuttons【发布时间】:2017-11-1616:52:09【问题描述】:我的棘手问题是:我有2个带有2个UITextView的按钮。如您所知,当我按下UITextView时,会出现键盘... 查看详情