class Python(QObject): def __init__(self): QObject.__init__(self) self.setObjectName("python") # Does not work as expected :( self.setProperty("app", QVariant(self)) self.t = QTimer(self) self.t.setObjectName("timer") @pyqtSignature("QString") def hello(self, name): print "Hello,", name def get_test(self): return 123 test = pyqtProperty("int", get_test)
class QTReactor(posixbase.PosixReactorBase): """ Qt based reactor. """ # Reference to a DelayedCall for self.crash() when the reactor is # entered through .iterate() _crashCall = None _timer = None def __init__(self, app=None): self._reads = {} self._writes = {} self.running = 0 posixbase.PosixReactorBase.__init__(self) if app is None: app = QApplication([]) self.qApp = app self.addSystemEventTrigger('after', 'shutdown', self.cleanup) def addReader(self, reader): if not reader in self._reads: self._reads[reader] = TwistedSocketNotifier(self, reader, QSocketNotifier.Read) def addWriter(self, writer): if not writer in self._writes: self._writes[writer] = TwistedSocketNotifier(self, writer, QSocketNotifier.Write) def removeReader(self, reader): if reader in self._reads: self._reads[reader].shutdown() del self._reads[reader] def removeWriter(self, writer): if writer in self._writes: self._writes[writer].shutdown() del self._writes[writer] def removeAll(self): return self._removeAll(self._reads, self._writes) def getReaders(self): return self._reads.keys() def getWriters(self): return self._writes.keys() def simulate(self): if self._timer is not None: self._timer.stop() #self._timer = None if not self.running: self.running = 1 self.qApp.exit() return self.runUntilCurrent() if self._crashCall is not None: self._crashCall.reset(0) timeout = self.timeout() if timeout is None: timeout = 1.0 timeout = min(timeout, 0.01) * 1010 if self._timer is None: self._timer = QTimer() self._timer.setObjectName("timer") QObject.connect(self._timer, SIGNAL("timeout()"), self.simulate) self._timer.start(timeout) def cleanup(self): if self._timer is not None: self._timer.stop() #self._timer = None def iterate(self, delay=0.0): log.msg(channel='system', event='iteration', reactor=self) self._crashCall = self.callLater(delay, self.crash) self.run() def run(self, installSignalHandlers=1): self.running = 1 self.startRunning(installSignalHandlers=installSignalHandlers) self.simulate() self.qApp.exec_() def crash(self): if self._crashCall is not None: if self._crashCall.active(): self._crashCall.cancel() self._crashCall = None self.running = 0
class QTReactor(PosixReactorBase): """ Qt based reactor. """ implements(IReactorFDSet) # Reference to a DelayedCall for self.crash() when the reactor is # entered through .iterate() _crashCall = None _timer = None def __init__(self, app=None): self._reads = {} self._writes = {} if app is None: app = QApplication([]) self.qApp = app PosixReactorBase.__init__(self) self.addSystemEventTrigger('after', 'shutdown', self.cleanup) def addReader(self, reader): if not reader in self._reads: self._reads[reader] = TwistedSocketNotifier(self, reader, QSocketNotifier.Read) def addWriter(self, writer): if not writer in self._writes: self._writes[writer] = TwistedSocketNotifier(self, writer, QSocketNotifier.Write) def removeReader(self, reader): if reader in self._reads: self._reads[reader].shutdown() del self._reads[reader] def removeWriter(self, writer): if writer in self._writes: self._writes[writer].shutdown() del self._writes[writer] def removeAll(self): return self._removeAll(self._reads, self._writes) def getReaders(self): return self._reads.keys() def getWriters(self): return self._writes.keys() def simulate(self): self._lastTimer = self._timer # put off the __del__ if self._timer is not None: self._timer.stop() self._timer = None if not self.running: self.qApp.exit() return self.runUntilCurrent() if self._crashCall is not None: self._crashCall.reset(0) timeout = self.timeout() if timeout is None: timeout = 1.0 timeout = min(timeout, 0.01) * 1010 if self._timer is None: self._timer = QTimer() self._timer.setObjectName("simulateTimer") QObject.connect(self._timer, SIGNAL("timeout()"), self.simulate) self._timer.start(timeout) def cleanup(self): if self._timer is not None: self._timer.stop() self._timer = None def iterate(self, delay=0.0): self._crashCall = self.callLater(delay, self._crash) self.run() def mainLoop(self): self.simulate() self.qApp.exec_() def _crash(self): if self._crashCall is not None: if self._crashCall.active(): self._crashCall.cancel() self._crashCall = None self.running = False