繁体   English   中英

如何在 Python 中同时运行多个循环?

[英]How to run multiple loops simultaneously in Python?

我正在尝试做一些看起来非常基本的事情,但我一直让自己陷入循环中,不允许我执行其他操作。 例如:

def functionOne():
    if x key is pressed:
        do something

def functionTwo():
    if y key is pressed:
        do something else

def functionThree():
    if z key is pressed:
        do something else

def main():
    functionOne()
    functionTwo()
    functionThree()

main()

我试图在每个函数中执行 while 循环,但这会将每个函数锁定在其自己的循环周期中。 我基本上希望我的程序运行,直到我按下 Python keyboard包中的一个非常特定的组合keyboard 我认为循环是保持程序运行的方法吗?

或者说,如果我想在 GUI 上实现它,并且只在点击 GUI 上的quit按钮时退出程序,同时等待其他按钮被点击以执行其他操作。

我知道我可以做一个巨大的主循环,条件相互嵌套,但我希望有一种更简洁的方法来做到这一点,涉及函数。

试试这个方法:-

def functionOne(key):
    if key != 'x':
        return
    if x key is pressed:
        do something

def functionTwo(key):
    if key != 'y':
        return
    if y key is pressed:
        do something else

def functionThree(key):
    if key != 'z':
        return
    if z key is pressed:
        do something else

def main():
    while key != 'q':
        key = input("Enter the key :")
        functionOne(key)
        functionTwo(key)
        functionThree(key)

main()

除此之外,如果函数计算量很大并且键输入间隔小于函数的计算时间,则可以使用线程。

你可以利用pynput

首先安装它

pip install pynput

那么你可以像下面的例子一样实现你正在寻找的东西(从 pynput 文档中获得):

from pynput import keyboard

def on_press(key):
    try:
        print('alphanumeric key {0} pressed'.format(key.char))
    except AttributeError:
        print('special key {0} pressed'.format(
            key))

def on_release(key):
    print('{0} released'.format(key))
    if key == keyboard.Key.esc:
        # Stop listener
        return False

# Collect events until released
with keyboard.Listener(
        on_press=on_press,
        on_release=on_release) as listener:
    listener.join()

# ...or, in a non-blocking fashion:
listener = keyboard.Listener(
    on_press=on_press,
    on_release=on_release)
listener.start()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM