Tkinter之Listbox触发事件选中后直接出来图片,自己写的,看不惯都是抄来抄去的乱象

在网上找了三四天资料没有一个正经给出文案的,都是抄来抄去,而且明明是抄的还是写自己原创。真是服了。最后还是自己写了一个,有很多胎教级别的小白不太懂,想着怕再走自己的弯路,就想着分享出来。这里以豆瓣电影排行榜为例,效果如下:

只要是选中,二维码图片都会时时变化,这里面的处理逻辑是这样的:

1、采集(这个不会的,就再回回炉)

2、将选中Listbox后获得的值再重新处理,比如会用到保存的文件名(这个是较重要的)

3、最后把图片保存到本地

4、另外label标签拿本地相应的图片。

废话不多说直接上代码:

from tkinter import *
import tkinter as tk
import requests
import re
import qrcode
from PIL import Image, ImageTk

movie_title = []
for page in range(0,50,25):

    url = 'https://movie.douban.com/top250?start=' + str(page) + '&filter='

    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36'
    }

    url_cont = requests.get(url, headers=headers)

    url_text = str(url_cont.text)

    obj = re.compile(r'<div class="hd">\s+<a href="(?P<a>.*?)" class="">\s+<span class="title">(?P<tit>.*?)</span>\s+', re.S)

    res = obj.finditer(url_text)

    for i in res:
        movie_title.append(i.group('a'))

movie_yuanzu = tuple(movie_title)#记得把List转成元组


def getListBoxValue(event):

    index=lb.curselection()
    labelVal.set(lb.get(index))

    content = lb.get(index)

    img_name = str(content).split("/")[-2]
    global img,img_local
    qr = qrcode.QRCode(
        version=2,  # 二维码的边长
        # ERROR_CORRECT_H: 30%的字码可被容错,因为插入了图片,所以增加容错率
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        box_size=6,
        border=2,
    )
    qr.make(fit=True)
    qr.add_data(content)
    img = qr.make_image()
    # 给二维码加图片
    # 把颜色模式转换为RGBA,它表示带透明度掩模的真彩色
    qr.clear()

    img.save('ewm/' + img_name + '.jpg')

    pic = Image.open('ewm/' + img_name + '.jpg')

    photo = ImageTk.PhotoImage(pic)

    pic_ewm = Label(listWin, width=260, height=260, background='pink', image=photo)
    pic_ewm.place(x=590, y=280)
    pic_ewm.image = photo


listWin=tk.Tk()
listWin.title('列表窗口')
listWin.geometry('900x800')


lbVal=StringVar()
lbVal.set(movie_yuanzu)
lb=Listbox(listWin,listvariable=lbVal,width=100)
lb.bind("<<ListboxSelect>>",getListBoxValue)
lb.grid(column=0)
labelVal=StringVar()
lab=Label(listWin,text='',background='white',width=50,height=20,textvariable=labelVal)
lab.grid(column=0)
lab.grid(column=0)
listWin.mainloop()

有不懂的可以随时私信我

这里要很感谢一篇文章:解决_tkinter.TclError: image “ ..... “ doesn‘t exist_weixin_45961741的博客-CSDN博客

最后是文中提到的label.image=ph 帮到了我。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值