Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过同一窗口获取python中的输入?_Python_Python 3.x_Input - Fatal编程技术网

通过同一窗口获取python中的输入?

通过同一窗口获取python中的输入?,python,python-3.x,input,Python,Python 3.x,Input,我想知道如何在不使用命令行或输入框的情况下获得python中的用户输入。 让我解释一下。我不想这样做 #All code is python 3 name=input("What is your name?") 为什么??运行脚本时,命令行不会自动聚焦。此外,它会弹出另一个窗口,这是我不想看到的,因为我无法快速点击escape来关闭它(如果你正在玩游戏,你可能会想这样做) 我试过什么? 我查看了WX及其对话框函数,类似于: import wx app=wx.App() def text_ent

我想知道如何在不使用命令行或输入框的情况下获得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,它是
键。按住()
函数,但它会在条目中插入很多相同的字母,即使我轻轻地按一下键。而且,当我在项目中实现它时,它只能接收普通字母。编写26条if语句来检测是否有shift键按下单个字母似乎有点违反直觉。 最后,我对尝试tkinter有点犹豫。我碰巧是盲人,从我读到的内容来看,tk非常直观,这让我担心它不能很好地与我的屏幕阅读器(NVDA)配合使用

所以,我在这里。在google上搜索“在Python3中不使用命令行获取输入”、“在同一窗口中输入”和“不使用输入()的输入”后,没有得到任何结果

总而言之,我希望在不使用input()函数的情况下接受用户输入,并且在这样做的过程中不会弹出任何其他窗口。
谢谢。

这个使用模块的解决方案怎么样。在任何时候,如果按escape,程序将退出。Python
sys.exit()
,以及内置的
exit()
quit()
所有调用
raisesystemexit
,因此这只需执行一个调用。如果按enter或return键,则while循环结束,您可以使用稍后在程序中按下的键,因为它们存储在变量
user\u input
中。最后的打印证明,按下的键存储在
user\u 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

所以在做了更多的研究之后,我发现:
我想这就是我想要的,尽管它仍然需要稍微修改。谢谢您的帮助

是和否。虽然这是一个很好的解决方案,但它仍然不允许我点击escape关闭输入对话框,这正是我真正希望看到的。角色是在不同的语言之间转换,还是保持不变?我这样问是因为你的解决方案检测到每一个被按下的键,我正在考虑创建一个元组来存储所有可能的字节组合。这样,我可以循环浏览列表,检查按下的键是否在列表中,如果是,则将其添加到用户输入中。显然,只有当每种语言都有一组字节组合时,这才有效,所以我问。如果你不明白我的意思,试着运行你的示例,按箭头键、escape键和F1到12键。我不确定这些字符是如何在python中以英语以外的其他语言读取的,因为有些语言有不同的字符,例如普通话-这大概就是你要问的。如果要查看每个键代表的内容,可以将其添加到else块:
else:print(按_键)
,它将以字节为单位打印每个键。此链接还提供每个字符的十六进制值。您想阻止哪些键存储在user_input var中?还有一个问题,阅读上面编辑的问题,您是否希望您按下的键显示在屏幕上,以便用户可以看到他们正在键入的内容?或者您不想让用户看到他们正在键入什么?在回答您的第一个问题时,我想阻止任何不是字母、数字或符号的内容。在回答第二个问题时,是的,我确实希望用户看到他们键入的内容。