#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()