【问题标题】:Why does the loop at the end of the code not work?为什么代码末尾的循环不起作用?
【发布时间】:2020-05-18 09:23:20
【问题描述】:

这是我的代码:

import time
from pynput import keyboard

def on_press(key):
     if 'char' in dir(key):  # check if char method exists,
        if key.char == 'q':  # check if it is 'q' key
                print("1")

def on_release(key):
    if 'char' in dir(key):  # check if char method exists,
        if key.char == 'q':  # check if it is 'q' key
            print("2")
# Collect events until released
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()


string = 2
while True:
    time.sleep(1)
    if string == 2:
        print ("2")
    else:
        print ("1")

我正在尝试在上述代码之后无限期地打印“2”的循环。我真的是编程新手,如果这很明显很抱歉。

【问题讨论】:

  • 你不会在任何地方改变string
  • 是的,我稍后会添加它,我现在希望它只打印“2”,不妥
  • 如果需要调试帮助需要提供Minimal, Reproducible Example
  • it doesn't work 到底是什么意思?
  • 它永远不会进入 while 循环,因为它永远不会退出键盘侦听器。

标签: python python-3.x loops pynput


【解决方案1】:

所以基本上你想制作一个程序,以 1 秒的间隔无限打印你在键盘上按下的键,这是我的做法(我将使用键盘模块,因为我没有使用 pynput 及其更简单):

import time
import keyboard
x = keyboard.read_key()
while 1:
    time.sleep(1)
    if x == '2':
        print(2)

所以这里的 x 等于你刚刚在键盘上按的,只要你不按其他任何东西,它就不会改变。

所以我们在这里使用了 while 1,因为整数 1 总是等于整数 1,所以它总是 true,基本上使用 while true,没有区别,尽管您可能希望将 while True 用于主循环,因为它更明显而不是 1.

程序停止 1 秒

如果 x == '2':你也可以使用整数,但我只是想在 ''S there 中使用它

如果 x 等于 2 打印 2

【讨论】:

  • 感谢您的回答,但我最初只是想按住一个键并在按下和释放键时打印一些东西。在这里我试图让一个字符串在何时更改我按下,当我释放一个键并有循环检测到这一点时。如果我按住这个键,我的操作系统只会向那个键发送垃圾邮件,最后我的代码会检测到我在按住它时按下了很多次。在这篇文章中,我说我希望循环无限期地打印 2,所以我可以看到循环工作
猜你喜欢
  • 2019-12-11
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 2016-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多