Hello, I'm trying to get my first PyQt4 application to work as intended, but it seems I'm stuck and out of ideas for now.
The program is a simple GUI showing an image. If the image on disk change my intension is that the displayed image in my application also change accordingly. What works: The filesystem change is detected and my program prints out "Change happened!" what is the problem: The image shown in the application is not changed. What am I doing wrong here? Any ideas and suggestions are appreciated. Best regards, Joacim Thomassen My program: #!/usr/bin/python """ familyframe.py Simple photo frame for the desktop Author: Joacim Thomassen, 4/2-2009 License: AGPLv3+ Last change: 24/2-2009 """ from __future__ import division import sys from math import * from PyQt4.QtCore import * from PyQt4.QtGui import * import time import fcntl import os import signal fname = "/home/joacim/.familyframe" class Watcher(QObject): def handler(self, signum, frame): self.emit(SIGNAL("imageChange")) def __init__(self, parent=None): super(Watcher, self).__init__() signal.signal(signal.SIGIO, self.handler) fd = os.open(fname, os.O_RDONLY) fcntl.fcntl(fd, fcntl.F_SETSIG, 0) fcntl.fcntl(fd, fcntl.F_NOTIFY, fcntl.DN_MODIFY | fcntl.DN_CREATE | fcntl.DN_MULTISHOT) class ImageWidget(QLabel): def __init__(self, parent=None): super(QLabel, self).__init__(parent) self.image = QImage("/home/joacim/.familyframe/image.jpg") self.setMinimumSize(200, 200) self.setAlignment(Qt.AlignCenter) self.setPixmap(QPixmap.fromImage(self.image)) def reload(self): print "Change happened!" self.image.load("/home/joacim/.familyframe/image.jpg") self.setPixmap(QPixmap.fromImage(self.image)) self.update() class CentralWidget(QWidget): def __init__(self, parent=None): super(QWidget, self).__init__(parent) self.imagewidget = ImageWidget() self.box = QHBoxLayout() self.box.addWidget(self.imagewidget) self.setLayout(self.box) def reload(self): self.imagewidget.reload() class MainWindow(QMainWindow): def __init__(self, w, parent=None): super(MainWindow, self).__init__(parent) self.centralwidget = CentralWidget() self.setWindowTitle("Family Frame") self.setCentralWidget(self.centralwidget) self.connect(w, SIGNAL("imageChange"), self.updateUi) self.show() def updateUi(self): self.centralwidget.reload() if __name__ == "__main__": app = QApplication(sys.argv) w = Watcher() main = MainWindow(w) app.exec_() -- http://mail.python.org/mailman/listinfo/python-list