Python 2.7如何为个人助手添加加载提示?
添加动态加载提示到你的Python个人助手
嘿,这个需求太实用了——等待查询结果的时候给用户一个反馈,体验立刻就上来了。我来帮你修改代码实现这个功能,主要思路是利用sys.stdout实时输出加载提示,等结果返回后再覆盖掉它。
修改后的完整代码
import wikipedia import wolframalpha import pyttsx3 import sys # 导入sys模块控制输出 engine = pyttsx3.init() while True: my_input = raw_input("Question: ") # 先打印加载提示,不换行 sys.stdout.write("...loading...") sys.stdout.flush() # 强制刷新输出缓冲区,确保提示立刻显示 try: # WolframAlpha查询逻辑 app_id = "Q2HXJ5-GYYYX6PYYP" client = wolframalpha.Client(app_id) res = client.query(my_input) answer = next(res.results).text # 回到行首,用结果覆盖加载提示 sys.stdout.write("\r") # 光标移到行开头 print(answer) engine.say(answer) engine.runAndWait() except: try: # Wikipedia查询逻辑 wiki_result = wikipedia.summary(my_input) # 同样回到行首覆盖提示 sys.stdout.write("\r") print(wiki_result) except: # 查询失败时也覆盖提示,再打印错误信息 sys.stdout.write("\r") print("Sorry nothing can be found from your query")
关键部分解释
sys.stdout.write("...loading..."):用write而不是print,因为print会自动换行,我们需要提示和结果在同一行。sys.stdout.flush():Python默认会缓冲输出,这一步强制立刻显示加载提示,避免用户看不到反馈。sys.stdout.write("\r"):\r是回车符,会把光标移到当前行的开头,这样后续的print内容就会覆盖掉之前的加载提示,看起来像是提示消失了,结果直接显示出来。
这样修改后,用户输入问题后会立刻看到...loading...的提示,等结果出来后提示会被替换成查询结果,完美解决等待时的反馈问题!
内容的提问来源于stack exchange,提问作者user9868018
相关产品推荐
相关产品推荐

