簡體   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