Python 异步编程 + tkinter 尝试

这篇博客探讨了在Python中使用tkinter进行GUI编程时的异步处理。由于tkinter是单线程,作者建议避免在主线程中运行GUI并同时修改其内容。为了实现异步操作,作者选择了aiohttp库而非不支持异步的requests。文中提供了使用aiohttp爬取图片的异步代码示例,并鼓励Python高手进行指正。
摘要由CSDN通过智能技术生成

首先先科普一下,tkinter是单线程的。也就是不推荐主线程跑GUI,再另外一个线程里面修改GUI里面的内容。(比如说用多线程爬虫然后在另外一个线程里面把爬取的内容放到GUI中,你当然可以这么做,只是不推荐)

由于requests不支持async编程,所以这里使用了aiohttp。

下面是爬取图片异步的方法以及代码,代码中有注释(欢迎python大佬指出错误):

import tkinter
from PIL import Image, ImageTk
from io import BytesIO
import aiohttp
import asyncio


class App:
    def __init__(self):
        self.app = tkinter.Tk()

        self.image_url = ['https://s2.ax1x.com/2019/04/10/AT6bi6.jpg', 'https://s2.ax1x.com/2019/04/28/ElAgxJ.jpg']
        tkinter.Button(self.app, command=lambda: asyncio.run(self.run_task())).pack()
        self.image_list = []

        self.app.mainloop()

    async def run_task(self):
        asyncio.create_task(self.keep_update()) # 异步更新GUI,避免卡死
        async with aiohttp.ClientSession() as session:
            for url in self.image_url:
                async with session.get(url) as re
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值