【发布时间】:2018-10-02 03:32:06
【问题描述】:
我正在使用 Python3.5 和 Tkinter 创建一个加密货币交换 API 客户端。我有几个显示器,我想每 10 秒异步更新一次。我可以使用 Tk.after() 每 10 秒更新一次显示,就像在这个例子中一样
def updateLoans():
offers = dd.loanOffers()
demands = dd.loanDemands()
w.LoanOfferView.delete(1.0, END)
w.LoanDemandView.delete(1.0, END)
w.LoanOfferView.insert(END, offers)
w.LoanDemandView.insert(END, demands)
print('loans refreshed')
root.after(10000, updateLoans)
为了让after 方法每 10 秒持续更新一次,函数 updateLoans() 需要作为可调用对象传递到函数内部的 after()。
现在困扰我的部分是,当我使这个函数与 python 的新 async 和 await 关键字异步时
async def updateLoans():
offers = await dd.loanOffers()
demands = await dd.loanDemands()
w.LoanOfferView.delete(1.0, END)
w.LoanDemandView.delete(1.0, END)
w.LoanOfferView.insert(END, offers)
w.LoanDemandView.insert(END, demands)
print('loans refreshed')
root.after(10000, updateLoans)
这里的问题是我不能等待 after 方法的参数内部的可调用对象。所以我得到一个运行时警告。 RuntimeWarning: coroutine 'updateLoans' was never awaited.
我的初始函数调用 IS 放置在事件循环内。
loop = asyncio.get_event_loop()
loop.run_until_complete(updateLoans())
loop.close()
显示最初填充得很好,但永远不会更新。
如何使用Tk.after 异步持续更新 tkinter 显示?
【问题讨论】:
标签: python python-3.x tkinter python-3.5 python-asyncio