python - 为什么 QFileSystemWatcher 适用于目录而不适用于 Python 中的文件?

标签 python qt pyqt qfilesystemwatcher

我从 another StackOverflow answer 借用了这段代码:

from PyQt4 import QtCore

@QtCore.pyqtSlot(str)
def directory_changed(path):
    print('Directory Changed!!!')

@QtCore.pyqtSlot(str)
def file_changed(path):
    print('File Changed!!!')

fs_watcher = QtCore.QFileSystemWatcher(['/path/to/files_1', '/path/to/files_2', '/path/to/files_3'])

fs_watcher.connect(fs_watcher, QtCore.SIGNAL('directoryChanged(QString)'), directory_changed)
fs_watcher.connect(fs_watcher, QtCore.SIGNAL('fileChanged(QString)'), file_changed)

问题是,file_changed 无论如何都不会被调用。例如,在添加文件时可靠地调用 directory_changed,但更改文件内容不会导致调用 file_changed。

我调用了一些 QtCore.SIGNAL('fileChanged(QString)') 的变体,例如,QtCore.SIGNAL('fileChanged(const QString &)') ,无济于事。没有警告或错误——它根本不会触发该功能。

建议?

最佳答案

很难确定哪里出了问题,因为示例代码不完整,因此根本无法正常工作。

但是,假设您正在运行的真实代码或多或少是理智/完整的,您的问题可能是由于没有将目录本身添加到路径列表中引起的.

一个基本的脚本应该是这样的:

import sys
from PyQt4 import QtCore

def directory_changed(path):
    print('Directory Changed: %s' % path)

def file_changed(path):
    print('File Changed: %s' % path)

app = QtCore.QCoreApplication(sys.argv)

paths = [
    '/path/to',
    '/path/to/files_1',
    '/path/to/files_2',
    '/path/to/files_3',
    ]

fs_watcher = QtCore.QFileSystemWatcher(paths)
fs_watcher.directoryChanged.connect(directory_changed)
fs_watcher.fileChanged.connect(file_changed)

sys.exit(app.exec_())

关于python - 为什么 QFileSystemWatcher 适用于目录而不适用于 Python 中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13518985/

相关文章:

python - 非结构化点云的区域增长 : failed verification pcl

linux - 为 Qt 项目创建可执行文件

Python - 展开字典

python - Python程序输出错误

c++ - 创建返回 QList<int> 的函数

c++ - Qt5 (C++) 从 GMT/UTC 字符串到 UNIX 时间戳的转换

python - PyQt:使用 setRect() 控制 QGraphicsRectItem 的位置

pyqt - 调整自定义 QTableWidget 的大小(宽/高)

python - 如何从属于 MainWindow 类的 QlineEdit 读取文本,并使用 python 和 pyqt 将其使用到 Qthread 类中?

Python pendulum 模块返回错误的周数