1

私は別のStackOverflowの答えからこのコードを借りました:

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 &)')無駄に、のいくつかのバリエーションを呼び出しました。警告やエラーはありません-単に関数をトリガーしません。

推奨事項?

4

2 に答える 2

5

サンプル コードが不完全であり、現状ではまったく機能しないため、何が問題なのかを特定するのは困難です。

ただし、実行している実際のコードが多かれ少なかれ健全で完全であると仮定すると、問題はおそらくディレクトリ自体をパスのリストに追加していないことが原因です。

基本的なスクリプトは次のようになります。

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_())
于 2012-11-22T21:02:19.447 に答える