我如何让按键第一次做一件事,而第二次又做另一件事?

问题描述 投票:0回答:1

所以我把这个脚本放在一起了,这使我每当按下“ w”键时都可以发送一个osc(打开声音控制)消息。 (我需要在我的计算机的后台运行它,因此,任何有关如何使其更高效的建议都将受到欢迎!:D)

我遇到的问题是,当我第二次按下“ w”时,我希望它发送不同的消息。 (这是client.send_message出现的地方。)您将看到我开始写此内容,无济于事。

简而言之,当我第一次按下“ w”时,它可以完美运行。 (执行client.send_message("/TABS", "Mixer"))。现在,当我第二次点击它时,我希望它执行client.send_message("/TABS", "Instruments")我该如何去做?

代码:

import argparse
import pynput

from pythonosc import udp_client
from pynput.keyboard import Key, Listener
from pynput import keyboard
import keyboard

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--ip", default="192.168.1.140",
        help="The ip of the OSC server")
    parser.add_argument("--port", type=int, default=8420,
        help="The port the OSC server is listening on")
    args = parser.parse_args()

    client = udp_client.SimpleUDPClient(args.ip, args.port)

    def on_press(key):
        if keyboard.is_pressed('w'):
            client.send_message("/TABS", "Mixer")
        else:
            client.send_message("/TABS", "Instruments")


    with Listener(on_press=on_press) as listener:
        listener.join()
python python-3.x boolean keypress osc
1个回答
0
投票

您将需要保存某种状态(无论是否按下该键)。我假设在您第二次按w之后,程序应切换回第一个调用。

我无法启动您的示例,但是类似以下内容的方法应该起作用:

import argparse
import pynput

from pythonosc import udp_client
from pynput.keyboard import Key, Listener
from pynput import keyboard
import keyboard

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--ip", default="192.168.1.140",
        help="The ip of the OSC server")
    parser.add_argument("--port", type=int, default=8420,
        help="The port the OSC server is listening on")
    args = parser.parse_args()

    client = udp_client.SimpleUDPClient(args.ip, args.port)

    w_already_pressed = False  # State variable
    def on_press(key):
        if keyboard.is_pressed('w'):
            if not w_already_pressed:
                client.send_message("/TABS", "Mixer")
                w_already_pressed = True
            else:
                client.send_message("/TABS", "Instruments")
                w_already_pressed = False


    with Listener(on_press=on_press) as listener:
        listener.join()
© www.soinside.com 2019 - 2024. All rights reserved.