Saya kira pertanyaan Anda tidak termasuk deteksi perubahan, karena sampel Anda hanya menyangkut QgsMapCanvas.refresh()
Sebaliknya, Anda harus menelepon QgsRasterLayer.triggerRepaint()
Jika lapisan Anda disebut myLayer:
myLayer.setCacheImage( None )
myLayer.triggerRepaint()
Metode yang sama juga ada untuk layer vektor.
Untuk pemberitahuan perubahan file overhead yang rendah, saya akan mengusulkan melihat ke Qt QFileSystemWatcher, yang menggunakan inotify di linux dan teknik serupa di platform lain .
from PyQt4.QtCore import QFileSystemWatcher
def refreshLayer():
myLayer.setCacheImage( None )
myLayer.triggerRepaint()
watcher = QFileSystemWatcher()
watcher.addPath( '/path/to/your/raster' )
watcher.fileChanged.connect( refreshLayer )
Tentu saja ini dapat digabungkan dengan cek MD5 seperti yang diusulkan oleh nikel atau cek waktu modifikasi dengan os.stat(proposal Nathan W).