【发布时间】:2015-02-17 21:57:54
【问题描述】:
这是我的应用程序的基本前提:
我已经建立了一个 QFileSystemWatcher 来监视一个目录。
Path = [r'C:\Users\user\Documents\Images']
DirectoryWatcher = QtCore.QFileSystemWatcher(Path)
DirectoryWatcher.directoryChanged.connect(showImages.UpdateImages)
我过去使用过 QFileSystemWatcher,它总是能完美运行(对于目录和文件更改)。
应用程序将显示 \Images 文件夹中图像的幻灯片。将新图像放置在 \Images 文件夹中时,幻灯片将重置为包含新图像。如果图像从 \Images 文件夹中删除,幻灯片将再次重置。
我遇到的问题是:如果我将多个图像拖到 \Images 文件夹中,则会多次触发 directoryChanged 信号。信号被触发,并且为添加到文件夹中的每个图像运行相应的 UpdateImages() 例程,即使它们是同时添加的(即选择多个图像,将它们拖放到 \Images 中)。
这严重破坏了我的日常生活。有没有办法为一批目录更改触发一次 directoryChanged 信号? IE。在将最终图像添加到目录之前,我可以禁用信号吗?
非常感谢!
【问题讨论】:
-
我不认为图像是真正的同时复制。除非您实施一些时间延迟,否则这是预期的行为。
-
看起来没有适合您需要的信号,但您可以将
directoryChanged连接到设置标志或具有计时器的更智能的功能,而不是立即更新图像。这样您就可以自己过滤事件。 -
你也可以研究
eventFilter,它可以让你拦截和操纵某种类型的事件。 -
感谢您的意见,非常感谢。我没有过多地使用“eventFilter”,但我可以看到它可能很有用。 Windows(7,如果有区别的话)是否“宣布”有多少文件将被添加到目录中?如果我知道要移动的文件数量,在它们移动之前,我可以设置一个过滤事件,该事件在发出 directoryChanged 信号时运行。
标签: python pyqt pyside qfilesystemwatcher