【问题标题】:How to fix Tkinter dead frezzing or crashing because of huge data?如何修复 Tkinter 死机?
【发布时间】:2021-09-26 21:21:58
【问题描述】:

我正在尝试制作一个程序来一次显示一个图像(.png 扩展名),但给用户一个按钮来更改图片。

我所做的是:

  1. 借助 Pillow 模块从我的目录中读取图像
  2. 将其附加到列表中
  3. 通过一个按钮,我可以增加或减少列表的索引。

请注意,我必须阅读大约 600 张图像。

代码如下:

import os
from tkinter import *
from PIL import ImageTk,Image
import threading,time
#Define the tkinter instance
x=0
win= Tk()
dir_path= os.path.dirname(os.path.realpath(__file__))
print(dir_path)
l1=[]
#Define the size of the tkinter frame
win.geometry("700x400")
def start():
    threading.Thread(target=bg).start()
    win.after(5000,threading.Thread(target=fg).start())
#Define the function to start the thread
def bg():
    print("bg")
    for i in range(1,604):
        a=Image.open(f"{dir_path}\\{i}.png")
        a=a.resize((500,700), Image.ANTIALIAS)
        b=ImageTk.PhotoImage(a)
        l1.append(b)
        print(b)
        print(len(l1))
def fg():
    def add():
        global x
        x+=1
        img2=l1[x]
        d.configure(image=img2)
        d.image = img2
        d.update()
    global d
    d=Label(win,image=l1[x])
    d.pack()
    Button(win,text="add",command=add).place(x=0,y=0)
label= Label(win)
label.pack(pady=20)
#Create button
b1= Button(win,text= "Start", command=start)

b1.pack(pady=20)

win.mainloop()

但问题是 Tkinter 变得死机和滞后,以至于 gui 无法运行。

所以我的问题是,

如何修复 Tkinter dead Frezzes 以及是否有任何方法可以尽可能快地读取图像?

任何帮助将不胜感激,

提前致谢

【问题讨论】:

  • win.after(5000,threading.Thread(target=fg).start()) 应该改为 win.after(5000,threading.Thread(target=fg).start)。我也无法重现冻结问题。最好在点击后禁用/删除Start按钮。
  • 我已经在评论中说“我无法重现冻结问题”
  • 哦,抱歉没看到
  • 您不应该从其他线程调用tkinter 函数。它可能导致tkinter 崩溃,甚至没有给您回溯。

标签: python tkinter directory python-imaging-library


【解决方案1】:

经过一番搜索,我找到了解决方案,

但解决方案是专门针对图片幻灯片的,

解决方案是在 python 中使用 selenium。

您可以在driver.get(image_path) 中指定图像位置,它会为您打开图像,如果您想用按钮更改图像,只需用数字重命名所有图像并制作一个按钮添加+ 1 到索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    相关资源
    最近更新 更多