Skip to content
Snippets Groups Projects
Commit ef8c47e8 authored by Luke Campagnola's avatar Luke Campagnola
Browse files

Allow QtProcess without local QApplication

parent 3eeffd3b
No related branches found
No related tags found
No related merge requests found
...@@ -325,7 +325,8 @@ class QtProcess(Process): ...@@ -325,7 +325,8 @@ class QtProcess(Process):
GUI. GUI.
- A QTimer is also started on the parent process which polls for requests - A QTimer is also started on the parent process which polls for requests
from the child process. This allows Qt signals emitted within the child from the child process. This allows Qt signals emitted within the child
process to invoke slots on the parent process and vice-versa. process to invoke slots on the parent process and vice-versa. This can
be disabled using processRequests=False in the constructor.
Example:: Example::
...@@ -342,18 +343,29 @@ class QtProcess(Process): ...@@ -342,18 +343,29 @@ class QtProcess(Process):
def __init__(self, **kwds): def __init__(self, **kwds):
if 'target' not in kwds: if 'target' not in kwds:
kwds['target'] = startQtEventLoop kwds['target'] = startQtEventLoop
self._processRequests = kwds.pop('processRequests', True)
Process.__init__(self, **kwds) Process.__init__(self, **kwds)
self.startEventTimer() self.startEventTimer()
def startEventTimer(self): def startEventTimer(self):
from pyqtgraph.Qt import QtGui, QtCore ## avoid module-level import to keep bootstrap snappy. from pyqtgraph.Qt import QtGui, QtCore ## avoid module-level import to keep bootstrap snappy.
self.timer = QtCore.QTimer() self.timer = QtCore.QTimer()
app = QtGui.QApplication.instance() if self._processRequests:
if app is None: app = QtGui.QApplication.instance()
raise Exception("Must create QApplication before starting QtProcess") if app is None:
raise Exception("Must create QApplication before starting QtProcess, or use QtProcess(processRequests=False)")
self.startRequestProcessing()
def startRequestProcessing(self, interval=0.01):
"""Start listening for requests coming from the child process.
This allows signals to be connected from the child process to the parent.
"""
self.timer.timeout.connect(self.processRequests) self.timer.timeout.connect(self.processRequests)
self.timer.start(10) self.timer.start(interval*1000)
def stopRequestProcessing(self):
self.timer.stop()
def processRequests(self): def processRequests(self):
try: try:
Process.processRequests(self) Process.processRequests(self)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment