Python 生成300+;图像导致第300个左右图像之后的图像不显示
我正在开发一个程序,在这个程序中,用户可以查看画布中一个帧中的许多图像,从而使该帧可以滚动。但是如果我加载超过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初始
从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()