w759003376 发表于 2024-2-20 10:04

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

本帖最后由 w759003376 于 2024-2-20 10:06 编辑

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


代码
import base64
import tkinter
import threading
from tkinter.scrolledtextimport 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的记事本重构优化了,不过我没看出来打开快了多少({:301_1001:}

vaycore 发表于 2024-2-20 10:25

貌似很多GUI的输入框粘贴大文本都有这种问题,或许是GUI设计问题?

w759003376 发表于 2024-2-20 10:37

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

看了别人用c#写的窗口程序,就不会卡,tk在这方面真的这么不行嘛{:1_907:}

玩机小白丶王 发表于 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在这方面真的这么不行嘛

微软亲儿子怎么比,然后你可以把这些数据复制出来,然后你直接贴到编辑框里面去看看是否卡顿,不卡顿说明和控件关系不大,和界面有关的应该要用异步去做吧,你多线程开了,如果界面上还是在等待,结果不是差不多么。
页: [1] 2 3
查看完整版本: python中tkinter的text文本窗口写入数据过大会卡顿