大家好,我还在学习编程语言,遇到了一个问题没能找到解决方案,希望能向有经验的前辈讨教。
最近接触到了tkinter窗口化的应用,想把自己的图片集(0.jpg,1.jpg,....大约100个)做成能够循环播放的程序。通过button实现。但是通过其他博主的方式,很难做到这个要求,只会将少数个图片单独放进程序里进行逐一显示,并没有采用到for循环,这很不便利。
from tkinter import *
from PIL import Image, ImageTk
import time
import cv2
import os
top = Tk()
top.title('定时更换图片')
# 获取屏幕的宽度和高度,并且在高度上考虑到底部的任务栏,为了是弹出的窗口在屏幕中间
screenwidth = top.winfo_screenwidth()
screenheight = top.winfo_screenheight() - 100
# file = ['image/0.jpg'] #此处的image是我的文件夹,包括下文的list = []
bm1 = ImageTk.PhotoImage(file='image/0.jpg') #bm1 = PhotoImage(file='rest.gif')更改了程序
# bm2 = ImageTk.PhotoImage(file='image/1.jpg') #bm2-bm4是为了最后一段注释的程序进行逐一播放的
# bm3 = ImageTk.PhotoImage(file='image/2.jpg')
# bm4 = ImageTk.PhotoImage(file='image/3.jpg')
list = ['image/0.jpg','image/1.jpg','image/2.jpg','image/3.jpg',
'image/4.jpg','image/5.jpg','image/6.jpg','image/7.jpg',
'image/8.jpg','image/9.jpg','image/10.jpg','image/11.jpg',
'image/12.jpg','image/13.jpg','image/14.jpg','image/15.jpg']
label = Label(top, image=bm1)
label.bm = bm1
i = 0
def changeImage(i):
for i in range list[]
#做到这里就不会做了...
#下面这段代码在上面的函数中运行失败了。
# while i < 100:
# i += 1
# filename = str(i) + '.jpg'
# if os.path.isfile(filename):
# img1 = cv2.imread(filename)
# im1 = Image.fromarray(cv2.cvtColor(img1, cv2.COLOR_BGR2RGB))
# img = ImageTk.PhotoImage(image=im1)
# label.after(1000, changeImage, i)
#通过单独放的几个图片,可以实现循环播放,但是不是采用的for循环,对于多个图片集难以应用。
# if i % 3 == 1:
# label.configure(image = bm1)
# i = i + 1
# label.after(1000,changeImage,i)
# elif i % 3 == 2:
# label.configure(image=bm2)
# i = i + 1
# label.after(1000, changeImage,i)
# else:
# label.configure(image=bm3)
# i = i + 1
# label.after(1000, changeImage, i)
label.pack(fill=X,expand=1)
i = i + 1
label.after(1000,changeImage,i)
top.update_idletasks()
top.deiconify() #now window size was calculated
top.withdraw() #hide window again
# top.geometry('%sx%s+%s+%s' % (top.winfo_width() + 10, top.winfo_height() + 10, (screenwidth - top.winfo_width())/2,(screenheight - top.winfo_height())/2) ) #center window on desktop
top.deiconify()
top.mainloop()