簡體   English   中英

如何使 function 停止忽略其中調用的函數 Python

[英]How to make a function stop ignoring functions called within it Python

我有一個 function 可以讀取鍵盤,根據輸入應該打印一條特定的消息,但它一直忽略它並只打印控制號碼:

from pynput import keyboard
from multiprocessing import Process, Lock
from stickDerecho45Video import display
import time


mutex = Lock()
videomax = 1


def escribirValor(sacagawea):
    global videomax
    with mutex:
        videomax = sacagawea

def frustracion():
    print("1")
    escribirValor(1)


def reflexivo():
    print("2")
    escribirValor(2)



def confusion():
    print("3")
    escribirValor(3)



def masVerguenza():
    print("4")
    escribirValor(4)



def Input():
    while True:
        print("wait for key input")
        with keyboard.GlobalHotKeys({
                '<left>+<up>': frustracion,
                '<right>+<up>': reflexivo,
                '<right>+<down>': confusion,
                '<left>+<down>': masVerguenza})as h:
            h.join()
        display(videomax)
        time.sleep(0.25)

它應該調用的函數是這個:

from subprocess import run #from stickDerecho45Input import leerValor #,leerNombre 導入時間

def display(x):

    if x == 1:
        print("frustracion")
        #time.sleep(0.25)
    
if x == 2:
    print("reflexivo")
    #time.sleep(0.25)

if x == 3:
    print("confusion")
    #time.sleep(0.25)

if x == 4:
    print("masVerguenza")
    #time.sleep(0.25)

if x == 5:
    print("finito")

試驗輸入是按熱鍵中聲明的四個任意組合,output 是一個數字列表 1 1 1 2 2 2 2 4 我用它來知道是否調用了熱鍵功能。 取決於輸入,但絕不是預期的顯示。

理想的 output 將是 = frustracion frustracion reflexivo confusion。

我正在使用 Pynput 模塊來監控鍵盤。

一個非常明顯的錯誤是, escribirValor()將參數的值分配給名為videomax局部變量

可能還有其他問題,但這絕對是您必須解決的問題。

它應該分配給具有該名稱的全局變量:

所以

def escribirValor(sacagawea):
    global videomax
    with mutex:
        videomax = sacagawea

第一次反饋后的附錄:我不知道你的鍵盤模塊,但可能是縮進問題。

您能告訴我們通過對代碼進行以下修改后得到的 output 是什么嗎:

def Input():
    while True:
        print("wait for key input")
        with keyboard.GlobalHotKeys({
                '<left>+<up>': frustracion,
                '<right>+<up>': reflexivo,
                '<right>+<down>': confusion,
                '<left>+<down>': masVerguenza})as h:
            h.join()
            print("joined")
        print("after with statement")
    
        display(videomax)
        print("display called")
        time.sleep(0.25)

看起來 PYNPUT 熱鍵 class 是非常具有侵入性的,所以即使在單獨的線程中,它也不會識別任何它不調用的東西。 解決方案是將顯示調用置於分配給熱鍵的功能中。

大量修改后,代碼如下:

輸入腳本:

from pynput import keyboard
from stickDerecho45Video import display
import time


def frustracion():
    display(1)

def reflexivo():
    display(2)

def confusion():
    display(3)

def masVerguenza():
    display(4)

with keyboard.GlobalHotKeys({
        '<left>+<up>': frustracion,
        '<right>+<up>': reflexivo,
        '<right>+<down>': confusion,
        '<left>+<down>': masVerguenza})as h:
    h.join()

def Despliegue():
    while True:
        time.sleep(0.25)

顯示腳本:

import time

def display(x):

    if x == 1:
        print("frustracion")
        time.sleep(0.25)
    
    if x == 2:
        print("reflexivo")
        time.sleep(0.25)

    if x == 3:
        print("confusion")
        time.sleep(0.25)
    
    if x == 4:
        print("masVerguenza")
        time.sleep(0.25)

    if x == 5:
        print("finito")
        time.sleep(0.25)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM