问题

键盘输入的字符串是保存在stdin中的,我在程序中如何将stdin中数据拿到并赋给一个变量? 之前我是通过sys.stdin.readline()来读取stdin中的数据的,但是导致界面卡死,我想问一下你有什么办法?我google一下,没有找到我想要的

data = input()
用 sys.stdin.readline 或 input, 都只能读取整行数据. 如果没有按回车键, 调用是阻塞不返回的.

这就是为什么程序界面被卡死的原因.

Qt 里还有个键盘事件的钩子. 需要在终端键盘输入时, 可能需要配置一下.

1
2
3
QtCore.pyqtRemoveInputHook()
code.InteractiveConsole(_locals).interact()
QtCore.pyqtRestoreInputHook()

当QtCore模块第一次导入时,它会安装一个Python输入钩子(即它设置Python的PyOS_InputHook变量的值)。这允许在应用程序运行时在解释器提示符处输入命令。然后可以动态创建新的Qt对象并调用任何现有的Qt对象的方法。输入钩子可能会导致某些类型的应用程序出现问题,特别是那些通过不同手段提供类似设备的应用程序。此功能删除PyQt安装的输入钩。

对于图形界面程序, 最合理的做法还是只用输入控件, LineEdit 等, 不用控制台, 也就是不用 sys.stdin
Qt 处理键盘消息应该用键盘事件