Python 生成300+;图像导致第300个左右图像之后的图像不显示

Python 生成300+;图像导致第300个左右图像之后的图像不显示,python,canvas,tkinter,frame,scrollable,Python,Canvas,Tkinter,Frame,Scrollable,我正在开发一个程序,在这个程序中,用户可以查看画布中一个帧中的许多图像,从而使该帧可以滚动。但是如果我加载超过300张图片。当它达到300标记后,之后的图像不会显示在画布上,但它仍然可以让你滚动,就像它们在那里一样,因此你只能看到灰色背景 为什么会这样 我怎样才能解决这个问题 代码: 从PIL导入ImageTk,图像为im 从cStringIO导入StringIO 从线程导入线程 从Tkinter进口* 导入ttk 导入操作系统 课程申请(框架): 定义初始化(自身,父级): 帧。\uuuu初始

我正在开发一个程序,在这个程序中,用户可以查看画布中一个帧中的许多图像,从而使该帧可以滚动。但是如果我加载超过300张图片。当它达到300标记后,之后的图像不会显示在画布上,但它仍然可以让你滚动,就像它们在那里一样,因此你只能看到灰色背景

  • 为什么会这样
  • 我怎样才能解决这个问题
  • 代码:

    从PIL导入ImageTk,图像为im
    从cStringIO导入StringIO
    从线程导入线程
    从Tkinter进口*
    导入ttk
    导入操作系统
    课程申请(框架):
    定义初始化(自身,父级):
    帧。\uuuu初始化(自,父)
    self.pack(填充=两个)
    协议(“WM_删除_窗口”,self.closeApp)
    self.images=[]
    self.image=“image.png”#图像是200x100
    self.temp=“”
    self.create_Browse()
    def创建_浏览(自我):
    self.tfr=框架(self,高度=25,宽度=650)
    self.tfr.pack\u传播(False)
    自包装(侧面=顶部)
    self.menuBar=Frame(self.tfr,bg=“lightGray”)
    self.menuBar.pack(侧面=顶部,填充=X)
    
    self.menuButton=标签(self.menuBar,字体=(“Arial”,13),宽度=10,文本=“您是否尝试过使用1个图像、2个图像、3个图像、5个图像、10个图像等进行测试?@TigerhawkT3是的,我使用了大约50个图像进行了测试,效果很好。不确定,但我假设每个图像都加载到内存中。因此,从逻辑上讲,您的程序在开始以交换方式存储图像时运行缓慢。您的图像文件有多大?这是什么意思?”“停止响应”?你是说它永远不会完成加载?或者,一旦它加载所有图像并启动程序,它将不允许你滚动或调整大小?@cdw100100:不,我认为你应该创建一个MCVE,这样我们就可以缩小问题的范围。我所做的只是删除套接字代码,将一个图像硬编码到程序中(在列表中添加了500次),然后删除了对SocketIO的不必要使用。
    from PIL import ImageTk, Image as im
    from cStringIO import StringIO
    from threading import Thread
    from Tkinter import *
    import ttk
    import os
    
    class Application(Frame):
        def __init__(self, parent):
            Frame.__init__(self,parent)
            self.pack(fill=BOTH)
            root.protocol("WM_DELETE_WINDOW", self.closeApp)
    
            self.images = []
            self.image = "Image.png" #Image is 200x100
            self.temp = ""
    
            self.create_Browse()
    
        def create_Browse(self):
            self.tfr = Frame(self, height=25, width=650)
            self.tfr.pack_propagate(False)
            self.tfr.pack(side=TOP)
    
            self.menuBar = Frame(self.tfr, bg="lightGray")
            self.menuBar.pack(side=TOP, fill=X)
    
            self.menuButton = Label(self.menuBar, font=("Arial", 13), width=10, text="Menu <")
            self.menuButton.pack(side=LEFT)
    
            self.mfr = Frame(self, bd=0)
            self.mfr.pack(side=TOP)
    
            self.scroller = Scrollbar(self.mfr, orient=VERTICAL)
            self.scroller.pack(side=RIGHT, fill=Y)
    
            self.viewArea = Canvas(self.mfr, bg="Gray", height=475, width=650, bd=0, highlightbackground="Gray")
            self.viewArea.pack(side=TOP, fill=BOTH)
    
            self.mfr2 = Frame(self.viewArea, height=475, width=65, bg="Gray", bd=0)
            self.mfr2.pack(side=TOP, fill=BOTH)
    
            self.scroller.configure(command=self.viewArea.yview)
            self.viewArea.configure(yscrollcommand=self.scroller.set)
            self.viewArea.create_window((0,0), window=self.mfr2, anchor=NW)
    
            self.mfr2.bind("<Configure>", self.scroll)
            self.scroller.bind_all("<MouseWheel>", self.mouseWheel)
    
            def generate():
                num = 0
                count = 0
    
                while count < 500:
                    frame = Frame(self.mfr2, bg="Gray")
                    frame.pack(side=TOP, fill=X)
    
                        label = Label(frame, image=img, bg="Gray")
                        label.image = img
    
                        if i == 0:
                           label.pack(side=LEFT, padx=(8, 0))
                        else:
                           label.pack(side=LEFT)
    
                        num += 1
    
                    count += 1
    
                    for i in range(3):
                        img = ImageTk.PhotoImage(im.open(self.image))
    
            generate()
    
        def mouseWheel(self, event):
            self.viewArea.yview_scroll(-1*(event.delta/120), "units")
    
        def scroll(self, event):
            self.viewArea.configure(scrollregion=self.viewArea.bbox("all"), bg="Gray", bd=0)
    
        def closeApp(self):
            os._exit(0)
    
    root = Tk()
    root.title("Byte Vortex")
    root.resizable(0,0)
    root.geometry("650x500")
    root.iconbitmap("Files/System_Files/icon.ico")
    
    app = Application(root)
    
    root.mainloop()