Luc*_*iel 8 python events tk-toolkit tkinter python-asyncio
我正在使用asyncio和tkinter开发一个简单的图形网络应用程序.我遇到了将asyncio事件循环与Tk的mainloop相结合的问题.如果可能的话,我想在没有线程的情况下这样做,因为这两个库(但特别是tkinter)都不是非常线程安全的.目前,我在asyncio协程中使用Tk.update,它只运行tk事件循环的一次迭代:
@asyncio.coroutine
def run_tk(tk, interval=0.1):
try:
while True:
tk.update()
yield from asyncio.sleep(interval)
except TclError as e:
if "application has been destroyed" not in e.args[0]:
raise
Run Code Online (Sandbox Code Playgroud)
但是,为了探索所有选项,我想知道是否可以执行反向 - 如果可以在tk回调中仅调用asyncio事件循环的单次迭代.
And*_*lov 10
公共方法的缺失loop.run_once()是有意的.并非每个受支持的事件循环都有一个迭代一步的方法.通常,底层API具有创建事件循环并永久运行它的方法,但模拟单个步骤可能非常无效.
如果您真的需要它,您可以轻松实现单步迭代:
import asyncio
def run_once(loop):
loop.call_soon(loop.stop)
loop.run_forever()
loop = asyncio.get_event_loop()
for i in range(100):
print('Iteration', i)
run_once(loop)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1675 次 |
| 最近记录: |