本帖最后由 w759003376 于 2024-2-20 10:06 编辑
问题:想实现把图片转为base64编码,并用python中tkinter的text文本模块接收,但是base64数据较大造成GUI窗口卡顿,也分别利用线程去执行或者利用after刷新去慢慢写入,最终还是会卡顿。
想了解的点:
1.是否tkinter中text文本组件本身就无法接收大数据,有大量数据过来一定会卡顿,无法解决
2.如果有解决方案,应该是怎样的思路解决了
代码
[Python] 纯文本查看 复制代码 import base64
import tkinter
import threading
from tkinter.scrolledtext import ScrolledText
class Test():
def __init__(self):
self.file = "1.jpg"
root=tkinter.Tk()
root.geometry("300x400+400+400")
root.title("测试")
button=tkinter.Button(root,text="图片转换base64",height=5,width=15,command=self.base64_img1)
button.pack()
self.Ent = tkinter.Text(root, height=10, width=20)
self.Ent.pack()
# self.Ent = tkinter.scrolledtext.ScrolledText(root,height=10,width=20)
# self.Ent.pack()
root.mainloop()
def base64_img1(self):
t1=threading.Thread(target=self.base64_img)
t1.start()
def base64_img(self):
f=open(self.file,"rb") #转为二进制格式
base64_data = base64.b64encode(f.read()).decode("utf-8")#使用base64进行加密
f.close()
if self.file.endswith('.png'):
base64_data = 'data:image/png;base64,' + base64_data
elif self.file.endswith('.jpg') or self.file.endswith('.jpeg'):
base64_data = 'data:image/jpeg;base64,' + base64_data
elif self.file.endswith('.gif'):
base64_data = 'data:image/gif;base64,' + base64_data
elif self.file.endswith('.webp'):
base64_data = 'data:image/webp;base64,' + base64_data
self.Ent.insert(tkinter.END,base64_data)
#print(base64_data)
if __name__=='__main__':
Test() |