2012-11-22 264 views
1

我借這個代碼another StackOverflow answer爲什麼QFileSystemWatcher適用於目錄,但不適用於Python中的文件?

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

很難確定發生了什麼問題,因爲示例代碼不完整,所以根本無法工作。

但是,假設你正在運行真正代碼或多或少的理智/完成後,您的問題可能是由未添加該目錄本身的路徑列表引起的。

一個基本的腳本應該是這個樣子:

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_()) 
+1

你是對的,儘管我的問題並沒有將文件添加到路徑列表。我誤解了這個類不是遞歸的。 –

+0

在調用file_changed的情況下,更新模型或QTreeView以顯示更新文件的方式是什麼。在我的情況下,當我知道它已更改時,我想查看更新的日期/時間戳。我有一個編譯按鈕,我希望新的.mpy文件顯示更新的時間戳 – Eradicatore

+0

@Eradicatore。請問一個新問題。 – ekhumoro

相關問題