我想使用grid()
在文件夹中显示图像。但是当我尝试使用以下代码时,我得到了单个图像迭代的输出。
我的代码:
def messageWindow():
win = Toplevel()
path = 'C:\Users\HP\Desktop\dataset'
for r in range(7):
for c in range(10):
for infile in glob.glob(os.path.join(path,'*.jpg')):
im = Image.open(infile)
resized = im.resize((100, 100),Image.ANTIALIAS)
tkimage = ImageTk.PhotoImage(resized)
myvar=Label(win,image = tkimage)
myvar.image = tkimage
myvar.grid(row=r,column=c)
root = Tk()
button = Button(app, text='Images in DataSet',command = messageWindow)
button.pack(padx = 1, pady = 1,anchor='ne')
button.place( x = 850, y = 60)
root.mainloop()
当我运行此代码时,5分钟后会弹出一个子窗口,它会显示一个这样的图像;
但是如何获取数据集中的所有图像?欢迎任何建议。 Tkanks为您提供支持!
答案 0 :(得分:5)
正如我在评论中所说,您在网格的每一行和每一行都放置了相同的图像。以下是基于您希望在每行中显示的COLUMNS
的数量,使用内置divmod()
函数迭代计算每一行的行和列的方法来避免这种情况。 image_count
的当前值:
def messageWindow():
win = Toplevel()
path = r'C:\Users\HP\Desktop\dataset'
COLUMNS = 10
image_count = 0
for infile in glob.glob(os.path.join(path, '*.jpg')):
image_count += 1
r, c = divmod(image_count-1, COLUMNS)
im = Image.open(infile)
resized = im.resize((100, 100), Image.ANTIALIAS)
tkimage = ImageTk.PhotoImage(resized)
myvar = Label(win, image=tkimage)
myvar.image = tkimage
myvar.grid(row=r, column=c)
win.mainloop() # Not sure if you need this, too, or not...
答案 1 :(得分:-1)
您始终对数据集中的所有图像使用相同的列和行。
尝试删除行和列for循环。并做这样的事情:
c = 0
r = 0
for infile in glob.glob(os.path.join(path,'*.jpg')):
im = Image.open(infile)
resized = im.resize((100, 100),Image.ANTIALIAS)
tkimage = ImageTk.PhotoImage(resized)
myvar=Label(win,image = tkimage)
myvar.image = tkimage
myvar.grid(row=r,column=c)
r += 1
这应该快70倍:)。