Python TKinter更新图像列表

Python TKinter更新图像列表,python,tkinter,os.path,Python,Tkinter,Os.path,我正在使用TKinter显示文件夹的一些图像。这些是从列表中加载的: image\u list=[os.path.join(“/home/pi/fotos/previews”,fn)为下一个(os.walk(“/home/pi/fotos/previews”)[2]] 但文件夹中不时会有新照片更新,因此TKinter必须以某种方式刷新,以显示这些新图像 如何使用新图像列表刷新TKinter 以下是完整的代码: #/usr/bin/python 导入图像 导入ImageTk 进口Tkinter

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

image\u list=[os.path.join(“/home/pi/fotos/previews”,fn)为下一个(os.walk(“/home/pi/fotos/previews”)[2]]
但文件夹中不时会有新照片更新,因此TKinter必须以某种方式刷新,以显示这些新图像

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

以下是完整的代码:

#/usr/bin/python
导入图像
导入ImageTk
进口Tkinter
导入glob
导入系统
导入操作系统路径
导入操作系统
image_list=[os.path.join(“/home/pi/fotos/previews”,fn)表示下一步(os.walk(“/home/pi/fotos/previews”))[2]]
已排序的\图像列表=已排序的(图像\列表,键=str.swapcase,反向=True)
电流=0
def移动(增量):
全局当前,已排序的\u图像列表

如果不是(0如果您在时间A存储文件名列表,然后在时间B获取新的文件名列表,则可以使用
set
操作
symmetric\u difference
查找B中不在A中的项目(即:新文件).Tk
after
方法可以让您计划一个函数以每隔一段时间执行此操作。然后,您可以为新文件创建新的Tk映像,并将其添加到Tk映像列表中


每个平台都有一些API,用于请求在文件系统发生更改时通知您的应用程序。在Windows上,这是函数及其朋友,在Linux上是inotify。但是,最简单的跨平台方法是在计时器上轮询目录的内容。

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

实际上,我创建了一个只需再次检查列表的函数

def刷新(增量):
全局当前,已排序的\u图像列表
text_list=next(os.walk(“/home/pi/fotos/previews”)[2]
image_list=[os.path.join(“/home/pi/fotos/previews”,fn)表示下一步(os.walk(“/home/pi/fotos/previews”))[2]]
已排序的文本列表=已排序的(文本列表,键=str.swapcase,反向=True)
已排序的\图像列表=已排序的(图像\列表,键=str.swapcase,反向=True)
打印(已排序的图像列表)
打印('已刷新')
这个函数每秒钟调用一次,所以一切工作都很快

def更新程序():
Timer(1.0,updater.start())
刷新(0)
更新程序()
到目前为止,我遇到的唯一问题是,当当前查看的图像是旧列表中的最后一张时,“新”的最后一张照片没有正确加载到TKinter中。我必须导航回上一张,然后才能向前查看新照片


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

我有一个想法,没有什么不同:只是不时地重新加载列表。图像不会太多,这样操作的速度应该可以。但我的问题不是如何加载新文件,而是如何更新TKinter以在系统中显示这些新文件tem。