Получение ввода в Python через то же окно? - PullRequest
2 голосов
/ 27 июня 2019

Я хотел бы знать, как получить пользовательский ввод в python без использования командной строки или поля ввода.Позволь мне объяснить.Я не хочу делать это

#All code is python 3
name=input("What is your name?")

Почему?При запуске сценариев командная строка не фокусируется автоматически.Кроме того, он открывает другое окно, чего я не хочу, потому что я не могу нажать escape, чтобы закрыть его в спешке (что-то, что вы, возможно, захотите сделать, если играете в игру).

Чтоя пробовал?Я посмотрел на WX, и это диалоговая функция, что-то вроде этого:

import wx
app=wx.App()
def text_entry(title,message):
    result=None
    dlg=wx.TextEntryDialog(None, message,title)
    if dlg.ShowModal()==wx.ID_OK: result=dlg.GetValue()
    dlg.Destroy()
    return result
text_entry("Text entry","Enter something here")

Пока это работает, всплывает другое окно, которое снова, я не хочу.Тем не менее, это ближе к тому, что я в конечном итоге ищу, потому что я могу нажать escape, чтобы заставить его уйти.

Я пытался использовать pygame, и это key.get_pressed() функция, но он вставляет много того жеписьмо в запись, даже если я слегка коснусь ключа.Кроме того, когда я внедрил его в проект, он мог подбирать только обычные буквы.Написание 26 операторов if для обнаружения нажатия клавиши для одного письма с клавишей Shift или без нее кажется немного противоречивым.Наконец, я немного не решаюсь попробовать tkinter.Я оказался слепым, и из того, что я прочитал, tk очень наглядно, поэтому я обеспокоен тем, что он не будет хорошо работать с моей программой чтения с экрана (NVDA).

Итак, я здесь.После поиска в Google «получения ввода без использования командной строки в Python 3», «ввода в том же окне» и «ввода без использования input ()» ничего не дали.

Напомним, я хочу принятьпользовательский ввод без использования функции input () и без каких-либо дополнительных окон, появляющихся на протяжении всего времени, которое я выполняю.Спасибо.

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Итак, проведя еще какое-то исследование, я обнаружил следующее: https://codeload.github.com/Nearoo/pygame-text-input/zip/master Я думаю, что это то, что я ищу, хотя его все же нужно немного изменить.Спасибо за помощь

0 голосов
/ 27 июня 2019

Как насчет этого решения с использованием модуля msvcrt . В любое время, если вы нажмете escape, программа закроется. Python sys.exit() и встроенные модули exit() и quit() все вызывают raise SystemExit, так что это всего на один вызов меньше. Если вы нажмете клавишу ввода или возврата, цикл while завершится, и вы сможете использовать клавиши, которые были нажаты позже в вашей программе, поскольку они хранятся в переменной user_input. Печать в конце просто подтверждает, что нажатые клавиши сохраняются в переменной user_input, а функция input() просто оставляет окно открытым, чтобы вы могли видеть, как оно работает.

import msvcrt


user_input = b''

while True:
    pressed_key = msvcrt.getche()  # getch() will not echo key to window if that is what you want
    if pressed_key == b'\x1b':  # b'\x1b' is escape
        raise SystemExit
    elif pressed_key == b'\r':  # b'\r' is enter or return
        break
    else:
        user_input += pressed_key

print('\n' + user_input.decode('utf-8'))  # this just shows you that user_input variable can be used now somewhere else in your code
input()  # input just leaves the window open so you can see before it exits you may want to remove
...