吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1041|回复: 23
收起左侧

[求助] python中tkinter的text文本窗口写入数据过大会卡顿

[复制链接]
w759003376 发表于 2024-2-20 10:04
本帖最后由 w759003376 于 2024-2-20 10:06 编辑

问题:想实现把图片转为base64编码,并用python中tkinter的text文本模块接收,但是base64数据较大造成GUI窗口卡顿,也分别利用线程去执行或者利用after刷新去慢慢写入,最终还是会卡顿。
想了解的点:
1.是否tkinter中text文本组件本身就无法接收大数据,有大量数据过来一定会卡顿,无法解决
2.如果有解决方案,应该是怎样的思路解决了

image.png
代码
[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()

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

塞北的雪 发表于 2024-2-20 10:13
直接写到文件里吧,你想想微软原生的记事本打开大文件都卡,何况你这是tk
jjjzw 发表于 2024-2-20 10:19
塞北的雪 发表于 2024-2-20 10:13
直接写到文件里吧,你想想微软原生的记事本打开大文件都卡,何况你这是tk

记事本会卡貌似是设计问题,记事本打开大文件会一次性按照窗口尺寸给全部文本换行,据说win11的记事本重构优化了,不过我没看出来打开快了多少(
vaycore 发表于 2024-2-20 10:25
貌似很多GUI的输入框粘贴大文本都有这种问题,或许是GUI设计问题?
 楼主| w759003376 发表于 2024-2-20 10:37
塞北的雪 发表于 2024-2-20 10:13
直接写到文件里吧,你想想微软原生的记事本打开大文件都卡,何况你这是tk

看了别人用c#写的窗口程序,就不会卡,tk在这方面真的这么不行嘛
玩机小白丶王 发表于 2024-2-20 10:41
用易语言得了 几分钟写出来 稳定不报错
d8349565 发表于 2024-2-20 10:44
新建一个线程执行任务就行了,这样不会导致GUI界面卡死
hange13 发表于 2024-2-20 10:55
本帖最后由 hange13 于 2024-2-20 10:59 编辑

那他不能一下接受很大的数据,那就避免一次性插入大量数据导致的卡顿嘛

但是少量多次的话,速度又会慢一点,不知你能接受不
sai609 发表于 2024-2-20 13:35
csv格式不行吗
jidesheng6 发表于 2024-2-20 13:43
w759003376 发表于 2024-2-20 10:37
看了别人用c#写的窗口程序,就不会卡,tk在这方面真的这么不行嘛

微软亲儿子怎么比,然后你可以把这些数据复制出来,然后你直接贴到编辑框里面去看看是否卡顿,不卡顿说明和控件关系不大,和界面有关的应该要用异步去做吧,你多线程开了,如果界面上还是在等待,结果不是差不多么。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表