gpt4 book ai didi

python - TKinter 更新图片列表

转载 作者:太空宇宙 更新时间:2023-11-03 14:44:26 27 4
gpt4 key购买 nike

我正在使用 TKinter 显示文件夹的一些图像。这些是从列表中加载的:

image_list = [os.path.join("/home/pi/fotos/previews",fn) for fn in next(os.walk("/home/pi/fotos/previews"))[2]]

但是该文件夹会不时更新新照片,因此 TKinter 必须以某种方式刷新,才能显示这些新图像。

如何使用新图像列表刷新 TKinter?

完整代码如下:

#!/usr/bin/python

import Image
import ImageTk
import Tkinter
import glob
import sys
import os.path
import os

image_list = [os.path.join("/home/pi/fotos/previews",fn) for fn in next(os.walk("/home/pi/fotos/previews"))[2]]
sorted_imagelist = sorted(image_list, key=str.swapcase, reverse=True)

current = 0

def move(delta):
global current, sorted_imagelist
if not (0 <= current - delta < len(sorted_imagelist)):
tkMessageBox.showinfo('End', 'No more image.')
return
current -= delta
image = Image.open(sorted_imagelist[current])
photo = ImageTk.PhotoImage(image)
label['image'] = photo
label.photo = photo


root = Tkinter.Tk()

root.configure(background="#eee")

label = Tkinter.Label(root, compound=Tkinter.TOP, bg="#eee")
label.pack()
label.place(x=90, y=30)

frame = Tkinter.Frame(root, bg="#eee")
frame.pack()

Tkinter.Button(frame, text='Refresh', height=10, width=25, command=root.update).pack(side=Tkinter.LEFT)
Tkinter.Button(frame, text='Previous picture', height=10, width=25, command=lambda: move(-1)).pack(side=Tkinter.LEFT)
Tkinter.Button(frame, text='Next picture', height=10, width=25, command=lambda: move(+1)).pack(side=Tkinter.LEFT)
Tkinter.Button(frame, text='Quit', height=10, width=25, command=root.quit).pack(side=Tkinter.LEFT)

move(0)

root.attributes('-fullscreen', True)
root.mainloop()

感谢您的帮助!

最佳答案

我找到了解决方案,并将回答我自己的问题以帮助其他人:

实际上,我创建了一个函数来简单地再次检查列表。

    def refresh(delta):

global current, sorted_imagelist

text_list = next(os.walk("/home/pi/fotos/previews"))[2]
image_list = [os.path.join("/home/pi/fotos/previews",fn) for fn in next(os.walk("/home/pi/fotos/previews"))[2]]

sorted_textlist = sorted(text_list, key=str.swapcase, reverse=True)
sorted_imagelist = sorted(image_list, key=str.swapcase, reverse=True)


print (sorted_imagelist)
print ('Refreshed')

该函数每秒调用一次,因此一切都运行得很快。

    def updater():
threading.Timer(1.0, updater).start()
refresh(0)

updater()

到目前为止,我遇到的唯一问题是,当当前查看的图像是旧列表中的最后一张时,"new"最后一张照片未正确加载到 TKinter 中。我必须导航回到上一个,然后才能继续查看新的。

我正在研究一种解决方案来解决最后一个问题。

关于python - TKinter 更新图片列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46359590/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com