Печатать при вводе в python

#python #python-3.x #input

#python #python-3.x #ввод

Вопрос:

У меня возникла небольшая проблема. Как вы вводите число, и оно распечатывается по мере ввода. Например

 salary = input("Enter Employee Salary")
print("Salary: ", salary)
  

Но это подождет, пока вы не нажмете enter, а затем выполнит команду печати.
Я имею в виду, что при вводе в окне печати отображается значение по мере ввода.

Комментарии:

1. Одного этого было бы достаточно: salary = input("Enter Employee Salary") потому что вы вводите и видите значение одновременно?

2. Ввод @Austin обычно выводится на экран, да. Но это отличается от ввода, появляющегося одновременно, скажем, в следующей строке со строкой Salary: , предшествующей ей. Для этого вам нужна какая-нибудь библиотека, которая отслеживает работу клавиатуры напрямую, а не просто считывает данные из потока, как это делает input .

3. Функция, которую вы пытаетесь реализовать, намного сложнее, чем вы думаете. Вы можете либо использовать curses , либо перехватывать нажатие клавиши, сохранять строку и каждый раз очищать консоль.

4. или print("Enter Employee Salary"); salary = input("Salary: ") или salary = input("Enter Employee SalarynSalary: ") также могут быть варианты, которые следует рассмотреть, если вас интересуют разрывы строк

5. На самом деле я использую raspberry pi, подключенный к ЖК-экрану 2×16 и цифровой клавиатуре. Я не могу видеть вводимое число, пока не нажму enter

Ответ №1:

Решение с использованием модуля Keyboard

Если вы хотите распечатать вывод с клавиатуры во время ввода с помощью модульной клавиатуры, вот полнофункциональный пример. Вы не можете запустить это в режиме ожидания, потому что возврат каретки не работает. Вероятно, есть более простые решения, но это лучшее, что я смог придумать, исходя из своей головы. Я использовал модуль keyboard.

 # Imports
import keyboard

# Create variables
salary = ""
pre = "Salary:"

# Print the pre-salary text to start off
print(pre, end="r")

# The callback function
def myfunc(event):
    # Grab the global variables
    global salary
    global pre
    # The keypresses that you dont want to log
    forbidden = ["shift", "Alt", "ctrl", "esc", "left", "right", "up", "down"]
    # Exits the program when the key ENTER is pressed
    if event.name == "enter":
        print("n")
        raise SystemExit
    # Simulates a delete by taking away the last character in the salary and carrige returning a ' '
    elif event.name == "backspace":
        salary = salary[:-1]
        print(pre, salary, ' ', end="r")
    # Creates a space (Without this it would just log 'space'
    elif event.name == "space":
        salary  = ' '
        print(pre, salary, ' ', end="r")
    # Checks if the keypress is in the forbidden list
    elif event.name in forbidden:
        return
    else:
        # Add the keypress to the salary
        salary  = event.name
        # Print it out using a carrige return
        print(pre, salary, end="r")

# When a key is pressed call the function myfunc
# Suppressing the output will allow me to print it myself
keyboard.on_press(myfunc, suppress=True)

# Puts it into an infinite loop
keyboard.wait()